JavaScript数组去重
改变原数组
function deduplicationArray(arr) {
let arrSet = new Set();
let i = 0;
while (i < arr.length) {
if (arrSet.has(arr[i])) {
arr.splice(i, 1);
continue;
}
arrSet.add(arr[i]);
i++;
}
}
不改变原数组,返回新的数组
-
Array.from
+Set
:function deduplicationArray(arr) { return Array.from(new Set(arr)); }
-
...
+Set
:function deduplicationArray(arr) { return [...new Set(arr)]; }
-
forEach
+every
function deduplicationArray(arr) { let target = []; arr.forEach(item => { target.every(x => x !== item) && target.push(item); }); return target; }
-
forEach
+includes
:function deduplicationArray(arr) { let target = []; arr.forEach(item => { !target.includes(item) && target.push(item); }); return target; }
-
filter
+indexOf
:function deduplicationArray(arr) { return arr.filter((v, i, a) => a.indexOf(v) == i); }
-
filter
+slice
+includes
:和第5条使用
indexOf
基本相同,减少了与后面元素的判断function deduplicationArray(arr) { return arr.filter((v, i, a) => !a.slice(0, i).includes(v)); }
-
reduce
+includes
:function deduplicationArray(arr) { return arr.reduce((targetArr, v) => { !targetArr.includes(v) && targetArr.push(v); return targetArr; }, []); }
总的来说就是遍历数组,至少一次