【问题标题】:How to push all key/value pairs to object from forEach如何将所有键/值对从 forEach 推送到对象
【发布时间】:2020-09-24 20:46:07
【问题描述】:

我正在通过 for 循环运行我的对象数组 (this.state.exportEntries),然后将 itemId 与 for 循环中返回的对象中的键进行比较。如果键与 itemId 匹配,则运行 forEach 将该键/值推送到过滤数据对象。

我的问题是,如果我有多个匹配的值,forEach 只会将最后一个返回的值推送到 filtersData 对象。

谁能帮我理解如何将所有返回值推送到过滤数据对象?正如您在 this.state.filteredData 的输出中看到的那样,只有最后一个匹配的键/值对被推送到过滤数据。

代码结构

for (let item of this.state.exportEntries) {

  console.log(item);

  Object.entries(item)
    .filter(([key,]) => key === itemId)
    .forEach(([key, value]) => (this.state.filteredData[key] = value));

}

console.log(this.state.filteredData);

项目的输出

{1.2: "1", 1.3: "1"}

{1.2: "2", 1.3: "2"}

{1.2: "3", 1.3: "3"}

{1.2: "4", 1.3: "4"}

this.state.filteredData 的输出

{1.3: "4"}

期望的结果

{
 1.3: "1, 2, 3, 4"
}

【问题讨论】:

  • push 用于数组。您想将key:values 添加到对象吗? object(key)=value。如果key 已经存在,它将被覆盖。例如,您可以检查并将value 更改为数组并添加新的value
  • 您真正想要什么输出?在this.state.filteredData[key] = value 中,您已通过上面的filter(它只能返回一个最多包含一个元素的数组)确保唯一被更新的值是键为itemId 的值。
  • 想要的结果是不可能的,因为它只能有一个同名的键。
  • @NinaScholz 好的,我已经更新了想要的结果。

标签: javascript object foreach


【解决方案1】:

您不需要迭代这些条目,因为您已经拥有该对象的键 itemId

for (let item of this.state.exportEntries) {
    console.log(item);
    if (itemId in item) {
        if (!this.state.filteredData[itemId]) this.state.filteredData[itemId] = item[itemID];
        else this.state.filteredData[itemId] += ', ' + item[itemID];
    }
}

console.log(this.state.filteredData);

【讨论】:

  • 感谢您对此的帮助。这给了我我需要的确切输出。
猜你喜欢
  • 2015-04-20
  • 2020-06-28
  • 1970-01-01
  • 2011-08-17
  • 2014-08-08
  • 1970-01-01
  • 2021-10-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多