以下是一些常用的方法的代码,你可以根据自己的需求选择使用哪种方法。
- 使用 Set
let arr = [{a: 1}, {a: 2}, {a: 1}];
let newArr = Array.from(new Set(arr.map(JSON.stringify))).map(JSON.parse);
console.log(newArr); // [{a: 1}, {a: 2}]
- 使用 filter 和 Map
let arr = [{a: 1}, {a: 2}, {a: 1}];
let newArr = arr.filter((item, index) => {
return arr.findIndex((item2) => {
return JSON.stringify(item) === JSON.stringify(item2);
}) === index;
});
console.log(newArr); // [{a: 1}, {a: 2}]
- 使用 reduce
let arr = [{a: 1}, {a: 2}, {a: 1}];
let newArr = arr.reduce((pre, cur) => {
let hasCur = pre.findIndex((item) => {
return JSON.stringify(item) === JSON.stringify(cur);
});
if (hasCur === -1) {
pre.push(cur);
}
return pre;
}, []);
console.log(newArr); // [{a: 1}, {a: 2}]
- 使用 for 循环
let arr = [{a: 1}, {a: 2}, {a: 1}];
let newArr = [];
for (let i = 0; i < arr.length; i++) {
let hasCur = false;
for (let j = i + 1; j < arr.length; j++) {
if (JSON.stringify(arr[i]) === JSON.stringify(arr[j])) {
hasCur = true;
break;
}
}
if (!hasCur) {
newArr.push(arr[i]);
}
}
console.log(newArr); // [{a: 1}, {a: 2}]
- 使用 indexOf 方法
let arr = [{a: 1}, {a: 2}, {a: 1}];
let newArr = [];
for (let i = 0; i < arr.length; i++) {
if (newArr.indexOf(JSON.stringify(arr[i])) === -1) {
newArr.push(JSON.stringify(arr[i]));
}
}
newArr = newArr.map((item) => {
return JSON.parse(item);
});
console.log(newArr); // [{a: 1}, {a: 2}]
- 使用 includes 方法
const resultArray = [];
arr.forEach((item) => {
if (!resultArray.includes(JSON.stringify(item))) {
resultArray.push(JSON.stringify(item));
}
});
const finalArray= resultArray.map((item) => JSON.parse(item));
console.log(finalArray); // [{ a : 'foo' }, { a : 'bar' }]
- 使用对象属性名
function unique(array, key){
var obj={},result=[];
array.forEach(function(v){
if(!obj[v[key]]){
obj[v[key]]=true;
result.push(v);
}
})
return result;
}
var array=[{name:'zhangsan',age:'12'},{name:'lisi',age:'13'},{name:'zhangsan',age:'14'}];
console.log(unique(array,'name')); // [Object{name:"zhangsan", age:"12"}, Object{name:"lisi", age:"13"}]