首页 > 代码库 > 几个小编程题(数组去重,获取字符串中最多字符)

几个小编程题(数组去重,获取字符串中最多字符)

1、编写一个方法去掉一个数组的重复元素:

方法一:普通for循环嵌套;

 1 function removeSame(arr){
 2         console.log(arr);
 3         for(var i=0, len = arr.length; i<len; i++){
 4             for(var j=i+1; j<len-i; j++){
 5                 if(arr[i] === arr[j]){
 6                     arr.splice(arr[j], 1);  //如果检测到有重复的元素则删除
 7                     j--;    //当有多个重复元素时向前移一个索引防止遗漏某些元素
 8                 }
 9             }
10         }
11         console.log(arr);
12         return arr;
13     }
14     
15     var arr = [1,2,3,3,3,3,3,4,4];
16     removeSame(arr);

方法二:利用for...in去重;

 1 function  removeSame(arr){
 2             var obj = {};
 3             var newArr = [];
 4             var key;
 5 
 6             for(var i=0; i<arr.length; i++){
 7                 key = arr[i];
 8                 if(obj[key]){
 9                     obj[key] = 0;  //若未添加进对象,则给其赋值为0;
10                 }else{
11                     obj[key] = 0;  //若添加进对象过(即出现重复元素),则将其覆盖原属性,保证数组中只有唯一一个属性名;
12                 };
13             };
14 
15             for(key in obj){
16                 newArr.push(key);  //将去重后的对象中的属性添加至新数组
17             };
18 
19             console.log(newArr);
20 }

方法三:利用indexOf()(indexOf可以返回元素在数组中的索引位置);

1 function onlyone(arr){
2         var arr1=[];     //用于保存已去重元素的数组
3         for(var i=0;i<arr.length;i++){
4             if(arr1.indexOf(arr[i])==-1){//arr的第i个元素是否已经保存进arr1,若保存过,跳过(即重复的元素不进数组);否则把当前项push到数组里面
5                 arr1.push(arr[i]);
6             }
7         }
8         return arr1;
9 }

 

2. 判断一个字符串中出现次数最多的字符,并统计次数:

 

 1 function getMaxLetter(){
 2     var obj={};            //保存拆分了的字符和出现次数
 3     
 4     for(var i=0, l=str.length, k; i<l; i++){
 5         k = str.charAt(i);        //将字符串中的各字符提取出来
 6         if(obj[k]){
 7             obj[k]++;            //字符的索引作为对象的值,若已出现过则进行++
 8         }else{
 9             obj[k] = 1;            //若对象中无此元素则赋值1,说明出现1次
10         }
11     }
12     console.log(obj);
13     
14     var m = 0;                    //出现最多的次数
15     var myArr = [];        //用于保存字符串中出现相同数量的最多字符
16     
17     for(var k in obj){            //for in遍历对象中的属性值(即各字符)
18         if( obj[k] >= m ){        //若有比最大值还大的,则重新赋值
19             if( obj[k] > m ){    
20                 myArr = [];    
21             }
22             myArr.push(k);        //若相等,则将相同的字符存入数组
23             m = obj[k];            //获取次数
24         }
25     }
26     console.log(‘出现次数最多的字符是:‘ + myArr + ‘ ,出现的次数:‘ + m);
27 }
28 
29 var str = "hello worlllllddddddd";
30 getMaxLetter(str);

 

几个小编程题(数组去重,获取字符串中最多字符)