Javascript 设置数组中对象的属性

Javascript 设置数组中对象的属性,javascript,typescript,Javascript,Typescript,我有一个对象数组: [{ 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

我有一个对象数组:

[{
   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=>previousitem
map,以跟踪具有相同
cod
值的前一项。将当前项目的
val
设置为
true
,将具有相同
cod
值的上一项目的
val
设置为
false
,更新当前项目的
cod
值的跟踪条目

例如:

const数据=[{
id:1,
cod:'123',
瓦尔:是的
},
{
id:2,
cod:'123',
瓦尔:是的
},
{
id:3,
cod:'123',
瓦尔:是的
},
{
id:4,
cod:'456',
瓦尔:是的
},
{
id:5,
cod:'456',
瓦尔:是的
}];
const previousCod=新映射();
用于(常量数据项){
如果(以前的cod.has(项目cod)){
previousCod.get(item.cod).val=false;
}
//如果保证初始值为“真”,则可以省略`
item.val=真;
上一个cod.set(item.cod,item);
}

控制台日志(数据)“我应该使用过滤器吗?”可能不是。数组总是按ID排序吗?是的,它总是按ID排序。