数组去重
1、使用 Set 数据结构
const arr = [1, 2, 3, 4, 5, 1, 2];
const uniqueArr = [...new Set(arr)];
console.log(uniqueArr); // Output: [1, 2, 3, 4, 5]
2、使用 filter 方法
const arr = [1, 2, 3, 4, 5, 1, 2];
const uniqueArr = arr.filter((item, index) => arr.indexOf(item) === index);
console.log(uniqueArr); // Output: [1, 2, 3, 4, 5]
3、使用 reduce 方法
const arr = [1, 2, 3, 4, 5, 1, 2];
const uniqueArr = arr.reduce((prev, cur) => prev.includes(cur) ? prev : [...prev, cur], []);
console.log(uniqueArr); // Output: [1, 2, 3, 4, 5]
4、使用 for 循环遍历
const arr = [1, 2, 3, 4, 5, 1, 2];
const uniqueArr = [];
for (let i = 0; i < arr.length; i++) {
if (uniqueArr.indexOf(arr[i]) === -1) {
uniqueArr.push(arr[i])
}
}
console.log(uniqueArr); // Output: [1, 2, 3, 4, 5]
注意:以上方法只适用于基本类型元素的数组去重
对象数组去重
1、使用 Set
const arr = [{id: 1}, {id: 2}, {id: 1}];
const uniqueArr = [...new Set(arr.map(item => JSON.stringify(item)))].map(item => JSON.parse(item));
console.log(uniqueArr); // [{id: 1}, {id: 2}]
2、使用 filter 和 findIndex
const arr = [{id: 1}, {id: 2}, {id: 1}];
const uniqueArr = arr.filter((item, index) => {
return arr.findIndex(obj => JSON.stringify(obj) === JSON.stringify(item)) === index;
});
console.log(uniqueArr); // [{id: 1}, {id: 2}]
3、使用 reduce
const arr = [{id: 1}, {id: 2}, {id: 1}];
const uniqueArr = arr.reduce((acc, cur) => {
const isExist = acc.find(obj => JSON.stringify(obj) === JSON.stringify(cur));
if (!isExist) {
acc.push(cur);
}
return acc;
}, []);
console.log(uniqueArr); // [{id: 1}, {id: 2}]
4、用for循环
var arr = [{ name: "张三", age: "17" }, { name: "李四", age: "20" }, { name: "张三", age: "24" }];
var result = [];
var obj = {};
for (var i = 0; i < arr.length; i++) {
if (!obj[arr[i].name]) {
result.push(arr[i]);
obj[arr[i].name] = true;
}
}
console.log(result);
注意:以上方法都需要将对象转为字符串再进行比较。如果对象中包含函数等无法被序列化的属性,则可能会出现问题。