数组去重
利用 ES6 Set 去重
let arr = [1, 2, 3, 4, 4, 3, 2, 1];
let uniqueArr = [...new Set(arr)];
console.log(uniqueArr); // [1, 2, 3, 4]
如无特殊情况(比如老旧项目不兼容 ES6),利用 set 是最简单性能也最好的方案。
为什么说是 N 种方法呢?因为数组的遍历有很多种方法,查找并去除重复值也有很多种方法,套娃起来自然就有了更多的实现方式,所以后面的方法有个印象,熟悉相关的 API,当作拓展知识即可。
利用indexOf去重:
let arr = [1, 2, 3, 4, 4, 3, 2, 1];
let uniqueArr = [];
arr.forEach((item) => {
if (uniqueArr.indexOf(item) === -1) {
uniqueArr.push(item);
}
});
console.log(uniqueArr); // [1, 2, 3, 4]
利用includes:
上一种和这一种存入新数组的方式,都可以用 filter 方法来返回到一个新数组里。
let arr = [1,2 ,3 ,4 ,4 ,3 ,2 ,1];
let uniqueArr = [];
arr.forEach((item) => {
if (!uniqueArr.includes(item)) {
uniqueArr.push(item);
}
});
console.log(uniqueArr); // [1 ,2 ,3 ,4]
利用sort():
let arr = [1, 2, 3, 4, 4, 3, 2, 1];
arr = arr.sort();
let uniqueArr = [arr[0]];
for (let i = 1; i < arr.length; i++) {
if (arr[i] !== arr[i - 1]) {
uniqueArr.push(arr[i]);
}
}
console.log(uniqueArr); // [1, 2, 3, 4]
利用hasOwnProperty
利用 Map 也可。
let arr = [1 ,2 ,3 ,4 ,4 ,3 ,2 ,1];
let obj = {};
let uniqueArr = [];
arr.forEach((item) => {
if (!obj.hasOwnProperty(item)) {
uniqueArr.push(item);
obj[item] = true;
}
});
console.log(uniqueArr); // [1 ,2 ,3 ,4]
笨蛋之双重循环,然后splice去重:
let arr = [1, 2, 3, 4, 4, 3, 2, 1];
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--;
}
}
}
console.log(arr); // [1, 2, 3, 4]