需要通过使array2中不存在的索引可见false来从array1创建新的array3。
在下面的示例中,我的索引为0,2。因此,结果数组必须在1,3可见为false
list_links = ['google/order', 'google/faq', 'google/404']
prefixes = ['order', '404']
new_result = [i for i in list_links if all(not i.endswith(c) for c in prefixes)]
预期结果:
['google/faq']
答案 0 :(得分:4)
一个选项可能是在array1上使用map,在array2上使用includes。在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);
答案 1 :(得分:0)
您可以将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
转到"false"
,其中id
未列出。它不会做相反的事情,即当列出visible
时,它不会将"true"
变成id
:它将仅复制原始设置。>
如果也应该发生相反的情况,则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"
,则更有意义。