需要通过使数组 2 中不存在的索引可见 false 来从 array1 创建一个新的 array3。
在下面的示例中,我有索引 0,2。所以结果数组必须对 1,3 可见为 false
。var array1 = [{
"visible": "true",
"id": 0
}, {
"visible": "true",
"id": 1
}, {
"visible": "true",
"id": 2
}, {
"visible": "true",
"id": 3
}];
var array2 = [0,2]
预期成果:
array3 = [{
"visible": "true",
"id": 0
}, {
"visible": "false",
"id": 1
}, {
"visible": "true",
"id": 2
}, {
"visible": "false",
"id": 3
}];
一种选择是在 array1 上使用 map 并在 array2 上使用 include。在 map 中,创建原始对象的副本,以便 array1 中的原始对象不会发生突变。
var array1 = [{
"visible": "true",
"id": 0
}, {
"visible": "true",
"id": 1
}, {
"visible": "true",
"id": 2
}, {
"visible": "true",
"id": 3
}];
var array2 = [0, 2];
var array3 = array1.map(i => {
var dc = JSON.parse(JSON.stringify(i));
dc.visible = array2.includes(i.id).toString();
return dc;
});
console.log(array3);
console.log(array1);
您可以将array2
转换为 Set 以保持恒定的查找时间:
function hide(array1, array2) {
const indexes = new Set(array2);
return array1.map(o => !indexes.has(o.id) ? ({...o, visible: "false" }) : o);
}
var array1 = [{
"visible": "true",
"id": 0
}, {
"visible": "true",
"id": 1
}, {
"visible": "true",
"id": 2
}, {
"visible": "true",
"id": 3
}];
console.log(hide(array1, [0, 2]));
这只会执行要求的操作:将visible
转到未列出id
的"false"
。它不会做相反的事情,即当列出id
时,它不会visible
变成"true"
:它只会复制原始设置。
如果反过来也应该发生,那么visible
的原始值不再起作用:
function hide(array1, array2) {
const indexes = new Set(array2);
return array1.map(o => ({...o, visible: indexes.has(o.id)+"" }));
}
var array1 = [{
"visible": "true",
"id": 0
}, {
"visible": "true",
"id": 1
}, {
"visible": "true",
"id": 2
}, {
"visible": "true",
"id": 3
}];
console.log(hide(array1, [0, 2]));
请注意,如果visible
是布尔值而不是字符串(false
和true
而不是"false"
和"true"
),那会更有意义。