方法1:使用 .reduce() 方法
使用 reduce() 方法維護一個累加器共虑,通過對象的屬性來判斷是否重復之众,代碼如下:
let arr = [
{indx: 0},
{indx: 1},
{indx: 2},
{indx: 3},
{indx: 1},
{indx: 2},
];
let obj = {};
let newArr = arr.reduce((cur,next) => {
obj[next.indx] ? "" : obj[next.indx] = true && cur.push(next);
return cur;
},[ ]) //設置cur默認類型為數組, [ ]:且設置初始值為空數組
console.log(newArr);
// [ {indx: 0}, {indx: 1}, {indx: 2}, {indx: 3}]
方法2:使用 .filter() 和 .findIndex() 相結合的方法
使用 filter() 方法過濾掉重復的元素蝇率,使用 findIndex() 方法判斷對象是否重復迟杂,代碼如下:
const arr = [{id: 1, name: "111"}, {id: 2, name: "222"},
{id: 1, name: "333"}, {id: 3, name: "444"}];
const uniqueArr = arr.filter((item, index) =>
arr.findIndex(i => i.id === item.id) === index)
// console.log(uniqueArr) : [{id: 1, name: '111'},{id: 2, name: '222'},{id: 3, name: '444'}]
方法3:使用 .forEach() 和 .some() 相結合的方法
使用 forEach() 方法遍歷數組,使用 some() 方法判斷是否重復本慕,代碼如下:
const arr = [{id: 1, name: "a"}, {id: 2, name: "f"},
{id: 1, name: "c"}, {id: 3, name: "h"}];
const uniqueArr = [];
arr.forEach(item => {
if (!uniqueArr.some(i => i.id === item.id)) {
uniqueArr.push(item);
}
})
方法4:for const of 和 find 結合
這個方法的思想與方法3類似 排拷,其思路結構如下:
創(chuàng)建一個空的唯一數組來存儲唯一對象。
循環(huán)遍歷數組中的對象锅尘。對于每個對象监氢,如果它不是重復的,則將其添加到唯一數組藤违。否則浪腐,忽略它
const arr = [{id: 1, name: "a"}, {id: 2, name: "f"},
{id: 1, name: "c"}, {id: 3, name: "h"}];
const unique = [];
for (const item of arr) {
const isDuplicate = unique.find((obj) => obj.id === item.id);
if (!isDuplicate) {
unique.push(item);
}
}
console.log(unique)
方法5:使用 Map
使用 Map 結構去重對象數組時,需要借助 array.map() 函數將對象數組進行轉換顿乒,示例代碼如下:
const arr = [{id: 1, name: "a"}, {id: 2, name: "b"},
{id: 1, name: "c"}, {id: 3, name: "d"}];
const uniqueArr = [...new Map(arr.map(item => [item.id, item])).values()];
針對多個屬性進行去重
有時候议街,您可能希望僅當對象具有兩個或多個具有相同值的屬性時才將其視為重復對象——多個屬性值相同。
對于這種情況璧榄,我們可以將上述方法進行稍微調整就可以進行使用特漩。
.filter() 和 .findIndex() 相結合的方法嘗試下:
const arr = [{id: 1, name: "a"}, {id: 2, name: "f"},
{id: 1, name: "a"}, {id: 3, name: "h"}];
const uniqueArr = arr.filter((item, index) =>
arr.findIndex(i => i.id === item.id
&& i.name === item.name) === index);
console.log(uniqueArr)
再用 For const of 和 find 結合的方法吧雹,也能實現(xiàn)同樣的效果
const arr = [{id: 1, name: "a"}, {id: 2, name: "f"},
{id: 1, name: "a"}, {id: 3, name: "h"}, {id: 4, name: "h"}];
const unique = [];
for (const item of arr) {
const isDuplicate = unique.find((obj) =>
obj.id === item.id && obj.name ==item.name);
if (!isDuplicate) {
unique.push(item);
}
}
console.log(unique)