我有
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”数组,并且还需要减少过滤方法和映射的数量。
答案 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
来查看版本。但是如果测试证明存在性能问题,我只会打扰,因为这段代码很简单。