簡體   English   中英

設置數組中對象的屬性

[英]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具有相同的上一個項目的codfalse ,當前項目的更新跟蹤條目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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM