乐趣区

关于javascript:数组去重方法集锦二

之前的几种办法都是 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,手机浏览随时随地~

退出移动版