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排序。