数组去重的几种常见方式
Set
Set 是 ES2015 新增的一种数据结构,类似数组,Set 中的元素只会出现一次,即 Set 中的元素是唯一的。
const a = [1, 2, 3, 4, 5, 5, 5];
const b = Array.from(new Set(a)) 或者const b= [… new Set(a)]
console.log(b); // [1, 2, 3, 4, 5]
双层 for 循环进行去重
function unique(arr) {
for (let i = 0; i < arr.length; i++) {
for (let j = i + 1; j < arr.length; j++) {
if (arr[i] == arr[j]) {
arr.splice(j, 1);
j–;
}
}
}
return arr;
}
const a = [1, 1, 2, 3, 2, 3, 4, 5, 5, 5, 6];
const b = unique(a);
console.log(b); // [ 1, 2, 3, 4, 5, 6 ]
indexOf() 或 includes()
创建一个新数组,利用 indexOf() 或 includes() 判断新数组是否包含已存在的元素,如果没有则添加到新数组。
function unique(source) {
let target = [];
source.forEach(item => {
if (target.indexOf(item) < 0) {
target.push(item);
}
});
return target;
}
const a = [1, 2, 3, 3, 4, 4, 5, 5, 5, 6];
const b = unique(a);
console.log(b); // [ 1, 2, 3, 4, 5 ]
filter
利用 filter 返回元素在数组中首次出现的索引值和该元素的索引一样的元素的新数组,即重复出现的元素会被过滤掉。
function unique(arr) {
return arr.filter((item, index, arr) => arr.indexOf(item, 0) === index);
}
const a = [1, 1, 2, 2, 3, 2, 3, 4, 5, 5, 5];
const b = unique(a);
console.log(b); // [ 1, 2, 3, 4, 5 ]