在javascript中,我有以下两个对象数组
data1 = [
{
id: 123,
option: "ABC",
value: "123"
},
{
id: 234,
option: "DFG",
value: "234"
}
];
data2 = [
{
id: 123,
option: "ABC",
value: "123"
}
];
当id与对象的第二个数组匹配时,我想在对象的第一个数组中只将该id的值(属性)设置为0。就像下面,一旦123这个id在两个数组中都匹配,那么data1数组应该是这样的。
data1 = [
{
id: 123,
option: "ABC",
value: "0"
},
{
id: 234,
option: "DFG",
value: "234"
}
];
如何实现上述方案?
你可以将data2的id保存在一个名为 "data2 "的文件中。Set
并对data1进行迭代,如果每个项目的id在集合中,则改变其值。
let data1 = [{ id: 123, option: 'ABC', value: "123" }, { id: 234, option: "DFG", value: "234" } ];
let data2 = [{ id: 123, option: 'ABC', value: "123" } ];
let set = new Set();
for(let i = 0; i < data2.length; i++)
set.add(data2[i]['id'])
for(let i = 0; i < data1.length; i++)
if(set.has(data1[i]['id']))
data1[i]['value'] = 0;
console.log(data1)
你可以利用 foreach
这将使你的第一个数组发生变化,这是你需要的,或者你也可以使用 map
(但它会生成新的数组)。
var data1 = [{ id: 123, option: 'ABC', value: "123" }, { id: 234, option: "DFG", value: "234" } ];
var data2 = [ { id: 123, option: 'ABC', value: "123" } ];
data1.forEach(k=>{
ispresent = data2.find(p=>p.id==k.id);
if(ispresent) k.value = '0'
});
console.log(data1);
你可以把第二个数组中的所有对象id做成一组,用一个 new Set()
,然后 .map()
你的第一个数组变成新的对象,改变 value
属性,如果对象的id在集合内(用 .has()
):
const data1 = [{ id: 123, option: 'ABC', value: "123" }, { id: 234, option: "DFG", value: "234" } ];
const data2 = [{ id: 123, option: 'ABC', value: "123" }];
const idSet = new Set(data2.map(o => o.id));
const res = data1.map(o => ({...o, value: idSet.has(o.id) ? "0" : o.value}));
console.log(res);