哪种更好的方法来改变javascript中另一个数组的对象值的数组

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (8)

我有

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上面的 例子但是数组顺序改变了。出来应该像上面的“c”数组一样,还需要减少过滤方法和地图的数量。

提问于
用户回答回答于
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)}));
用户回答回答于

非常简单的代码是:

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

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

如果您有大量数据,这可能效果不佳,您可能会使用Set替代版本查看版本。但是,如果测试显示性能问题,我只会烦心,因为这段代码很简单。

扫码关注云+社区

领取腾讯云代金券