JS数组去重
看了网上很多数组去重方法,用的比较常见的大概就几种,今天想自己来做一个总结。
部分内容参考该博客
1 . 在原数组上操作(基本方法)
思路:利用循环嵌套,判断数组中每个元素与其后面的元素是否相等,如果相等,就使用splice方法删掉后面的元素,注意j--。
function dedupe2(arr) {
for (var i = 0; i < arr.length; i++) {
for (var j = i + 1; j < arr.length; j++) {
if (arr[i] == arr[j]) {
arr.splice(j, 1);
j--;
}
}
}
return arr;
}
2 . 数组去重后返回一个新数组
思路:新建一个数组,遍历需要去重的数组,使用indexOf判断新数组中是否包含之前数组中每一项,不包含就push进去。
function dedupe1(arr) {
var newarr = [];
for (var i = 0; i < arr.length; i++) {
if (newarr.indexOf(arr[i]) == -1) {
newarr.push(arr[i]);
}
}
return newarr;
}
3 . 利用对象的属性去重
思路:每次从数组中取出一个元素,到对象中去访问这个属性,如果能访问到就说明重复。
function dedupe3(arr) {
var newarr = [];
var obj = {};
for (var i = 0; i < arr.length; i++) {
if (!obj[arr[i]]) {
newarr.push(arr[i]);
obj[arr[i]] = 1;
}
}
return newarr;
}
4 . 利用ES6中的Set数据结构和扩展运算符(参考ES6标准入门)
[...new Set([array])];
5 . 还是利用ES6中的Set
function dedupe4(arr) {
return Array.from(new Set(arr));
}
当然,数组去重的方法还有很多很多很多,例如常用的先排序后去重,但是我看了一些帖子,发现其中存在一些问题,排序时是用到了sort方法,但是并没有给sort方法一个正确的排序函数,默认情况下sort方法比较的是字符串,因此会出现一些问题。还有就是sort方法返回的数组也是排序后的数组,某些情况下可能不符合要求。
以上只是个人的一个小总结,代码都是经过测试后的,有问题请指正,也欢迎大家补充,谢谢。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。