为了账号安全,请及时绑定邮箱和手机立即绑定

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

一,利用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")

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

点击查看更多内容
2人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消