数组去重方法集锦(二)

之前的几种方法都是ES3的方法,也就是说如果你需要兼容低版本浏览器可以参考之前的方法。

今天的要说的是ES5的方法。数组的方法在ES5时增加了几个比如indexOf啦foreEach啦那么第一种就先用这两个。

其实它的原理还是前一个元素和后一个元素的比较。不明白前后对比的同学可以到前面文章看看啊!正好你可以多看一个,字不多能看懂!

方法一 索引对比法:

还是先创建老数组新数组,空的新数组就可以了

var arr = [3, 5, 2, 5, 7, 23, 5, 7];
var newArr = [];

接着给老数组用forEach方法,为什么用这个?我们都知道,之前一直用for循环的方法,但是ES5提供的几种遍历方法种,可以接收一个参数,这个参数分别是:数组元素,索引,数组本身。这些东西直接就可以用,岂不是很方便吗?

function fn(a, b, c) {}
arr.forEach(fn);

之后在拿到所有的东西,需要判断前后值是否一样,这是有需要用到indexOf,它的作用是可以检测这个值在数组种是否存在,不存在就返回-1。那么不存在意味着没找到一样的,对我们来说就是需要这个,所以push。

if (arr.indexOf(a,(b+1))==-1) {
  newArr.push(a);
}

整合一遍所有代码看看:

var arr = [3, 5, 2, 5, 7, 23, 5, 7];
var newArr = [];
function fn(a, b, c) {
  if (arr.indexOf(a, (b+1)) == -1) {
    newArr.push(a);
  }
}
arr.forEach(fn);
console.log(newArr);

方法二 索引查找法:

接下来看索引查找法,当然了也是应用ES5提供的新方法。先弄一个老数组一个新数组。新数组先给个值,就给老数组的第一个,这样后面好比较。

var arr = [3, 5, 2, 7, 23, 5, 7];
var newArr = [arr[0]];

判断新数组的值在老数组有没有一样的,如果没有还是用indexOf照元素,没找到的返回-1,没找到就是没有,所以push。

for (var i = 1; i < arr.length; i++) {
  if(newArr.indexOf(arr[i]) == -1){
    newArr.push(arr[i]);
  }
}

以下是最终代码:

var arr = [3, 5, 2, 7, 23, 5, 7];
var newArr = [arr[0]];
for (var i = 1; i < arr.length; i++) {
  if(newArr.indexOf(arr[i]) == -1){
    newArr.push(arr[i]);
  }
}
console.log(newArr);

大家应该发现了,用了ES5提供的新方法之后简单了不少,但前提是之前的方法要理解才行。低版本浏览器不要用这样的方法,否则不出效果或者报错。

那么也希望大家能关注我我都公众号web-jianma,手机浏览随时随地~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值