哪种更好的方法可以通过JavaScript中的另一个数组更改对象值的数组

时间:2019-06-12 19:07:03

标签: javascript arrays typescript object

我有

var a = ["4", "2"],
b = [{"item": "1"}, {"item": "4"}, {"item": "2"}, {"item": "3"}];

现在,如果我找到匹配的值则需要创建b的值,那么我需要找到每个a的值

c=[{"item": false}, {"item": true}, {"item": true}, {"item": false}]

我上面有jsfiddle example此处,但数组顺序已更改。结果应该类似于上面的“ c”数组,并且还需要减少过滤方法和映射的数量。

2 个答案:

答案 0 :(得分:2)

let a = ["4", "2"];
let b = [{"item": "1"}, {"item": "4"}, {"item": "2"}, {"item": "3"}];
const trueValues = new Set(a);
let c = b.map(obj => ({"item": trueValues.has(obj["item"])}));

结果是:

[{"item": false}, {"item": true}, {"item": true}, {"item": false}]

IE11不支持new Set(item1),您需要:

const trueValues = new Set()
a.forEach(item => trueValues.add(item))

您的代码导致

[{"item": true}, {"item": true}, {"item": false}, {"item": false}]

因为您接受了所有真实情况,然后添加了所有错误情况:

[...newItem, ...addOtherItems]

如果要将数组映射到其他数组,则应按原样使用map

对于IE9,您可以这样使用

b.map(b_i => ({item: a.some(a_i => a_i === b_i.item)}));

答案 1 :(得分:0)

非常简单的代码是:

const a = ["4", "2"]
const b = [{"item": "1"}, {"item": "4"}, {"item": "2"}, {"item": "3"}]

console .log (
  b .map ( ({item}) => ({ item: a . includes (item) }) )
)

如果您有大量数据,这可能效果不佳,您可能会使用Set来查看版本。但是如果测试证明存在性能问题,我只会打扰,因为这段代码很简单。