JS数组去重

数组去重的方法多种多样,当然我们最求的是最简单,性能最高的方法,下面介绍6种能够想到的数组去重:
1.ES5 filter+indexOf

function replace(arr){
  return arr.filter(function(item,index,self){
    return self.indexOf(item) === index;
})
}

2.sort+splice

function replace(arr){
  arr.sort(function(a,b){return a-b;});
  for(var i = 0;i < arr.length; i++){
    if(arr[i] == arr[i+1]){
      arr.splice(i+1,1);
      i--;
    }
  }
  return arr;
}

这个方法的思路是先把数组排序,然后比较相邻的两个值。 排序的时候用的JS原生的sort方法,JS引擎内部应该是用的快速排序吧。 最终测试的结果是此方法运行时间平均是第二种方法的三倍左右,不过比第一种和第三种方法快了不少。


3.filter+sort(效率最高)

function replace (arr) {
    return arr.concat().sort().filter(function (item, index, array) {
        return !index || item !== array[index - 1];
    })
}

4.ES6 set+Array.from(最简单,不过需要支持ES6)
function replace(arr){
  return [...new Set(arr)]
}
//or
function replace(arr){
  return Array.from(new Set(arr))
}

5.常规方法,创建新数组保存非重复元素

function replace(arr){
  var nowa = [];
    for(var i = 0;i<arr.length;i++){
      if(nowa.indexOf(arr[i]) == -1){
	 nowa.push(arr[i]);
      }
     }
  return nowa;
}


6.创建一个对象,标识是否为重复元素

function replace(arr) {
  var newarr = [];
  var barr = {};
  var l = arr.length;
  for (var i = 0; i < l; i++) {
    if (barr[arr[i]] == undefined) {
      barr[arr[i]] = 1;
      newarr[newarr.length] = arr[i];
    } else if (barr[arr[1]] == 1) {
      continue;
    }
  }
  return newarr;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值
>