在JavaScript中,可以使用多种方法对一维数组和数组对象进行去重。以下是一些常见的方法:
一维数组去重
1. 使用 Set
Set
只允许唯一值,可以直接用于一维数组的去重。
const arr = [1, 2, 3, 1, 2];
const uniqueArr = [...new Set(arr)];
console.log(uniqueArr); // [1, 2, 3]
2. 使用 filter
和 indexOf
通过 filter
方法配合 indexOf
来去重。
const arr = [1, 2, 3, 1, 2];
const uniqueArr = arr.filter((item, index) => arr.indexOf(item) === index);
console.log(uniqueArr); // [1, 2, 3]
3. 使用 reduce
利用 reduce
方法进行去重。
const arr = [1, 2, 3, 1, 2];
const uniqueArr = arr.reduce((acc, current) => {if (!acc.includes(current)) {acc.push(current);}return acc;
}, []);
console.log(uniqueArr); // [1, 2, 3]
4. 使用对象属性作为键
通过一个对象记录已存在的值,实现去重。
const arr = [1, 2, 3, 1, 2];
const map = {};
const uniqueArr = arr.filter(item => {if (!map[item]) {map[item] = true;return true;}return false;
});
console.log(uniqueArr); // [1, 2, 3]
数组对象去重
1. 使用 Set
和 JSON.stringify
利用 Set
的特性,结合 JSON.stringify
进行去重。
const arr = [{ id: 1 }, { id: 2 }, { id: 1 }];
const uniqueArr = Array.from(new Set(arr.map(a => JSON.stringify(a)))).map(e => JSON.parse(e));
console.log(uniqueArr); // [{ id: 1 }, { id: 2 }]
2. 使用 filter
和 findIndex
通过 filter
方法配合 findIndex
来去重。
const arr = [{ id: 1 }, { id: 2 }, { id: 1 }];
const uniqueArr = arr.filter((item, index) => arr.findIndex(obj => JSON.stringify(obj) === JSON.stringify(item)) === index
);
console.log(uniqueArr); // [{ id: 1 }, { id: 2 }]
3. 使用 reduce
利用 reduce
方法进行去重。
const arr = [{ id: 1 }, { id: 2 }, { id: 1 }];
const uniqueArr = arr.reduce((acc, current) => {const x = acc.find(item => JSON.stringify(item) === JSON.stringify(current));if (!x) {return acc.concat([current]);} else {return acc;}
}, []);
console.log(uniqueArr); // [{ id: 1 }, { id: 2 }]