我有2个对象数组
android:debuggable="true" tools:ignore="HardcodedDebugMode"
我想比较两个对象数组,并为array2中找不到的那些对象更改array1(IsChecked:false)的属性?
这是我的预期结果:
var array1 = [{ ID:"1", IsChecked : true},
{ ID:"2", IsChecked : true},
{ ID:"3", IsChecked : true},
{ ID:"4", IsChecked : true}]
var array2 = [{ ID:"1", IsChecked : true},
{ ID:"2", IsChecked : true}]
这是我尝试过的:
array1 = [{ ID:"1", IsChecked : true},
{ ID:"2", IsChecked : true},
{ ID:"3", IsChecked : false},
{ ID:"4", IsChecked : false}]
但这不能给出预期的答案
答案 0 :(得分:1)
您可以使用地图array2
,因为您需要使用先前收集的值更新array1
才能决定更新。
var array1 = [{ ID: "1", IsChecked: true }, { ID: "2", IsChecked: true }, { ID: "3", IsChecked: true }, { ID: "4", IsChecked: true }],
array2 = [{ ID: "1", IsChecked: true }, { ID: "2", IsChecked: true }],
map = new Map(array2.map(({ ID, IsChecked }) => [ID, IsChecked]));
array1.forEach(o => {
if (map.get(o.ID)) {
return;
}
o.IsChecked = false;
});
console.log(array1);
.as-console-wrapper { max-height: 100% !important; top: 0; }
答案 1 :(得分:0)
这对我有用。
var array1 = [
{ ID: "1", IsChecked: true },
{ ID: "2", IsChecked: true },
{ ID: "3", IsChecked: true },
{ ID: "4", IsChecked: true }
];
var array2 = [{ ID: "1", IsChecked: true }, { ID: "2", IsChecked: true }];
array1
.filter(el => JSON.stringify(array2).indexOf(JSON.stringify(el)) == -1)
.forEach(el => (el.IsChecked = false));
console.log(array1);
或者,您可以使用
array1
.filter(el => array2.map(({ID})=>ID).indexOf(el.ID) == -1)
.forEach(el => (el.IsChecked = false));