一、简单数组去重
1.set()方法
const nums = [1, 2, 2, 3, 3, 4];
const newNums1 = [...new Set(nums)];
const nums = [1, 2, 2, 3, 3, 4];
const newNums = Array.from(new Set(nums));
console.log(newNums);
2.filter + indexOf方法
const nums = [1, 2, 2, 3, 3, 4];
const newNums = nums.filter((n, i) => {
return nums.indexOf(n) === i;
});
console.log(newNums);
3.reduce + includes方法
const nums = [1, 2, 2, 3, 3, 4];
const newNums2 = nums.reduce((acc, curr) => {
return acc.includes(curr) ? acc : [...acc, curr];
}, []);
4.Map数据类型
const nums = [1, 2, 2, 3, 3, 4];
const newNums3 = [...new Map(nums.map(n => [n, n])).values()];
5.Object.values方法
const nums = [1, 2, 2, 3, 3, 4];
const newNums4 = Object.values(
nums.reduce((acc, curr) => ({...acc, [curr]: curr}), {})
);
二、对象数组去重
const data = [
{ id: 1, name: 'Alice' },
{ id: 2, name: 'Bob' },
{ id: 3, name: 'Alice' },
];
1.Map方法
const result = Array.from(new Map(data.map(ele => [ele.name, ele])).values())
2.if判断方法
const result = []
const obj = {}
data.map(ele => {
if (!obj[ele.name]) {
result.push(ele)
obj[ele.name] = true
}
})
return result
3.filter + Set方法
const set = new Set()
const result = data.filter((item, index) => {
const value = item[name]
if (!set.has(value)) {
set.add(value)
return true
}
return false
})