[英]Setting a property of an object inside array of objects based on a match: React JS
[英]Setting property of objects in array
我有一個對象數組:
[{
id: 1,
cod: '123',
val: true
},
{
id: 2,
cod: '123',
val: true
},
{
id: 3,
cod: '123',
val: true
},
{
id: 4,
cod: '456',
val: true
},
{
id: 5,
cod: '456',
val: true
}]
對於具有相同cod
和更高 id 的對象,我需要保持val
屬性為true
。 例如,我需要以下輸出:
[{
id: 1,
cod: '123',
val: false
},
{
id: 2,
cod: '123',
val: false
},
{
id: 3,
cod: '123',
val: true
},
{
id: 4,
cod: '456',
val: false
},
{
id: 5,
cod: '456',
val: true
}]
如何更改此數組以獲得所需的結果? 我應該使用過濾器嗎? 我有點失落。
您需要處理和變異數組中的每個元素(假設就地變異很好),因此.filter
不適合這里,因為它通常只是“刪除”元素。
一般方法是:迭代數組的每個元素並保留cod => previous item
映射以跟蹤具有相同cod
值的前一項。 設置val
當前項目以true
,集val
具有相同的上一個項目的cod
值false
,當前項目的更新跟蹤條目cod
值。
例子:
const data = [{ id: 1, cod: '123', val: true }, { id: 2, cod: '123', val: true }, { id: 3, cod: '123', val: true }, { id: 4, cod: '456', val: true }, { id: 5, cod: '456', val: true }]; const previousCod = new Map(); for (const item of data) { if (previousCod.has(item.cod)) { previousCod.get(item.cod).val = false; } // Can be omitted if the initial value is guaranteed to be `true` item.val = true; previousCod.set(item.cod, item); } console.log(data);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.