【发布时间】: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