继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

javaScript数组或者字符串去重的---三种方法

startitunderground
关注TA
已关注
手记 58
粉丝 98
获赞 931

一,利用indexOf方法

var arr = [ 2,4,5,6,2,4,6,1,7,8,5,6 ];
var temp=[];
function  cancelRepeat (arr) { 
        for (var i = 0; i<arr.length ; i++) {
//如果temp中没有arr[i],则把它加入到temp中
           if ( temp.indexOf( arr[i] ) === -1 ) {
                  temp.push(arr[i]);
               }
        }
}
cancelRepeat( arr );
console.log(temp);
[2, 4, 5, 6, 1, 7, 8]

二,利用for循环嵌套和for循环里的if判断,然后封装成function函数, 这种效率低,但是符合大多数人的思路: 设置一个数组容器,和一个标记。把数组arr中的转移到temp数组中,如果temp中有这个元素就把标志设置为true,然后break掉。

var arr = [ 2,4,5,6,2,4,6,1,7,8,5,6 ];
var  temp = [] , isRepeated ;
function  cancelRepeat (arr) {
     for (var i =0; i< arr.length; i++) {
                  isRepeated = false;
                  for ( var j = 0; j < temp.length;  j++) {
                        if ( arr[i] === temp[j] ) {
                            isRepeated = true;
                           break;
                            }
                    }
                 if ( !isRepeated ) {
                       temp.push( arr[i] );
                       } 
           }
}
cancelRepeat(arr);
console.log(temp);
[2, 4, 5, 6, 1, 7, 8]

第二种方法的改进型
我们可以用一个哈希表(hashtable)的结构记录已有的元素,这样就可以避免内层循环。恰好,在Javascript中实现hashtable是极为简单的,改进如下:

 var arr = [ 2,4,5,6,2,4,6,1,7,8,5,6 ];
 var result = [], hash = {};   
 function cancelRepeat (arr) {  
       for (var i = 0, elem;  (elem = arr[i])  !=  null ;  i++) { 
             if (!hash[elem]) {
             result.push(elem); 
             hash[elem] = true;
              }
         } 
} 
cancelRepeat(arr);
console.log(result); 
[2, 4, 5, 6, 1, 7, 8]

查找字符串中出现次数最多的字符,并且统计次数

function acount (str){
  // 转换为数组
  let arr = str.split("")
  // 定义一个容器
  let temp = {}
  for(let i in arr){
       if(temp[arr[i]]){ // 如果temp中存在的话,就temp[arr[i]] 的值加1
           temp[arr[i]] +=1
       }else{         // 如果temp中存在的话,就temp[arr[i]] 的值等于1
            temp[arr[i]] = 1
       }
 }
 let num  =0;
 let member = "";
 for(let j in temp){
 if(temp[j] >= num){
       num = temp[j]
       member = j
   }
 } 
 console.log(`出现次数最多的是:${member},共出现${num}次`)
}
acount("xingjizhengba")

这个解决方法是有问题的,这个方法只能解决某一个出现次数最多的字符,因为如果有多个出现相同次数的字符,那么只能检查到最早出现的那个。

打开App,阅读手记
2人推荐
发表评论
随时随地看视频慕课网APP

热门评论

//还可以使用ES6的方法
var a = [...new Set( [1,2,3,4,1,2,3,4] )];

a //[1,2,3,4]

var b = Array.from(new Set( [1,2,3,4,1,2,3,4] ) );

b //[1,2,3,4]


查看全部评论