我有过
var a = ["4", "2"],
b = [{"item": "1"}, {"item": "4"}, {"item": "2"}, {"item": "3"}];
现在,我需要找到每个a的值和b的值,如果我找到了匹配值,则需要创建
c=[{"item": false}, {"item": true}, {"item": true}, {"item": false}]
我在这里用jsfiddle处理了上面的example,但是数组顺序被改变了。结果应该像上面的"c“数组一样,还需要减少过滤方法和映射的数量。
发布于 2019-06-13 03:17:30
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)}));
发布于 2019-06-13 03:27:29
非常简单的代码是:
const a = ["4", "2"]
const b = [{"item": "1"}, {"item": "4"}, {"item": "2"}, {"item": "3"}]
console .log (
b .map ( ({item}) => ({ item: a . includes (item) }) )
)
如果您有大量的数据,这可能不能很好地执行,您可能会使用Set
查看一个版本。但我只关心测试是否显示出性能问题,因为这段代码很简单。
https://stackoverflow.com/questions/56568875
复制相似问题