我有2个对象数组
var array1 = [{ ID:"1", IsChecked : true},
{ ID:"2", IsChecked : true},
{ ID:"3", IsChecked : true},
{ ID:"4", IsChecked : false},
{ ID:"5", IsChecked : false},
{ ID:"6", IsChecked : true}]
var array2 = [{ ID:"1", IsChecked : true},
{ ID:"2", IsChecked : true},
{ ID:"3", IsChecked : true},
{ ID:"4", IsChecked : true}]
我想比较两个对象数组,并为array2中为true(IsChecked:true)的那些对象更改array1(IsChecked:true)的属性?
这是我的预期结果:
array1 = [{ ID:"1", IsChecked : true},
{ ID:"2", IsChecked : true},
{ ID:"3", IsChecked : true},
{ ID:"4", IsChecked : true},
{ ID:"5", IsChecked : false},
{ ID:"6", IsChecked : false}]
这是我尝试过的:
var map = new Map(array2.map(({ID,IsChecked})=>[ID,IsChecked]));
array1.forEach(o=>{
if(map.get(o.ID)){
return;
}
o.IsChecked = false;
});
,但对于array2中为true的数组,它返回false。 注意:这两个数组可能包含其他不同的属性。
答案 0 :(得分:2)
您可以将Array.forEach()
与Array.find()
方法结合使用:
var array1 = [{ ID:"1", IsChecked : true},
{ ID:"2", IsChecked : true},
{ ID:"3", IsChecked : true},
{ ID:"4", IsChecked : false},
{ ID:"5", IsChecked : false}]
var array2 = [{ ID:"1", IsChecked : true},
{ ID:"2", IsChecked : true},
{ ID:"3", IsChecked : true},
{ ID:"4", IsChecked : true}]
array1.forEach(function(array1Obj){
array2Obj = array2.find(({ID})=> ID == array1Obj.ID);
if(array2Obj && array2Obj.IsChecked){
array1Obj.IsChecked = true;
}
});
console.log(array1);