简单数组
1、使用filter()方法:通过filter()方法遍历数组,返回仅包含首次出现的元素的新数组。
const arr = [1, 2, 3, 4, 2, 3, 5];
const list = arr.filter((item, index) => arr.indexOf(item) === index);
console.log(list); // [1, 2, 3, 4, 5]
2、使用reduce()方法:通过reduce()方法遍历数组,将元素存储在一个临时对象中,每次遇到重复元素时将其跳过,最后返回所有不重复元素的数组。
const arr = [1, 2, 3, 4, 2, 3, 5];
const list = arr.reduce((prev, cur) => prev.includes(cur) ? prev : [...prev, cur], []);
console.log(list); // [1, 2, 3, 4, 5]
3、使用Map:通过Map对象可以将数组元素作为键,通过Map的键唯一性特性去重,然后再将Map对象转换为数组。
const arr = [1, 2, 3, 4, 2, 3, 5];
const list = [...new Map(arr.map(item => [item, item])).values()];
console.log(list); // [1, 2, 3, 4, 5]
json数组
可以使用Set对象和Array.from()方法去除JSON数组中的重复项,但是需要注意的是Set对象只去除原始类型(如数字、字符串、布尔值)的重复项,对于对象类型,只有当两个对象的内容完全相同时,才会被视为重复 。所以不能直接使用复合类型,要先通过json转为字符串格式
如下
const arr = [{ name: '张三', age: 18 },{ name: '李四', age: 20 },{ name: '张三', age: 18 },{ name: '王五', age: 22 }
];
const list = Array.from(new Set(arr.map(JSON.stringify))).map(JSON.parse);
console.log(list);
// [{ name: '张三', age: 18 }, { name: '李四', age: 20 }, { name: '王五', age: 22 }]