[英]How can add properties to my objects based on the duplicates inside the array?
我有這個對象數組
let arr = [
{
id: 1,
},
{
id: 1,
},
{
id: 2,
},
{
id: 1,
},
{
id:4,
},
{
id: 3,
},
{
id:4,
}
]
我需要根據條件查找並更改數組中的每個 object。 因此,如果數組中有重復項,我需要在我的對象上設置100
除了我應該有200
的最后一個重復項。 如果我沒有任何重復項,我應該再次擁有200
所以 output 應該是
let arr = [
{
id: 1,
number: 100
},
{
id: 1,
number: 100
},
{
id: 2,
number: 200
},
{
id: 1,
number: 200
},
{
id:4,
number: 100
},
{
id: 3,
number: 200
},
{
id:4,
number: 200
}
]
所以id 1 has duplicates
。 這就是為什么第一次出現設置為number:100
而最后一次設置為number:200
的原因。
Id 2
的編號為 200,因為沒有重復項並且它在列表中第一次出現。
我試過的
我被困在
for(let item of arr) {
for(let item2 of arr) {
if(item.id === item2.id) {
item.number = 100;
} else {
item.number = 200;
}
}
}
您可以簡單地反向遍歷數組並跟蹤您看到的id
,這里使用Set
。
const arr = [{ id: 1, }, { id: 1, }, { id: 2, }, { id: 1, }, { id: 4, }, { id: 3, }, { id: 4, }] let i = arr.length; const seen = new Set(); while (i--) { arr[i].number = seen.has(arr[i].id)? 100: 200; seen.add(arr[i].id) } console.log(arr)
您可以使用array.map()
遍歷數組。 我認為它可以提供一個簡潔明了的解決方案:
const result = arr.map((item, index) => {
const duplicate = arr.filter((_, indx) => indx > index).some((i) => i.id === item.id);
return { ...item, number: duplicate ? 100 : 200 }
});
console.log(result);
我們可以簡單地通過Array.map()以及Array.indexOf()和Array.lastIndexOf()方法來實現它。
工作演示:
// Input array let arr = [{ id: 1, }, { id: 1, }, { id: 2, }, { id: 1, }, { id:4, }, { id: 3, }, { id:4, }]; // Getting ID's from each object and create a seperate array let idArr = arr.map(function(item) { return item.id }); // Iterating through the id's array and assigning number property to an original array as per the requirement. idArr.forEach((item, index) => { if (idArr.indexOf(item) === idArr.lastIndexOf(item)) { arr[index].number = 200; } else { arr[index].number = 100; arr[idArr.lastIndexOf(item)].number = 200; } }); // Result console.log(arr);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.