改变.数组中的可见属性,通过基于索引数组进行筛选



需要通过使数组 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是布尔值而不是字符串(falsetrue而不是"false""true"),那会更有意义。

最新更新