【问题标题】:Which better way to change array of object's value by another array in javascript用javascript中的另一个数组更改对象数组值的更好方法
【发布时间】:2023-03-20 19:36:01
【问题描述】:

我有

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”数组一样,还需要减少过滤方法和映射的数量。

【问题讨论】:

  • edit您的问题包括您在 Stack Overflow 上的尝试。您可以使用Stack Snippets 这样做。
  • b.map(x => ({item: a.includes(x.item)})) - 这个?
  • @georg 也打败了我! ;)
  • IE会支持“includes”方法吗?
  • 不,不支持includesfindfindIndex

标签: javascript arrays typescript object


【解决方案1】:
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)}));

【讨论】:

    【解决方案2】:

    非常简单的代码是:

    const a = ["4", "2"]
    const b = [{"item": "1"}, {"item": "4"}, {"item": "2"}, {"item": "3"}]
    
    console .log (
      b .map ( ({item}) => ({ item: a . includes (item) }) )
    )

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-18
      • 2017-03-08
      • 2020-08-11
      • 2020-08-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多