[英]How can I create an array of objects based on some of another array object's properties?
[英]How to modify an array's each object's properties based on another array in React/JS?
我在名为“customData”的 object 中有两个 arrays。 arrays 名称是“标题”和“表格数据”。
我想修改“tabularData”数组对象,使每个 object 具有匹配“headings”数组的前 6 个属性和“tabularData”中的“id”属性的属性。
示例“customData”对象-
{
headings: [{"id":"k1"},{"id":"k2"},...,{"id":"k6"}],
tabularData: [{"k1":"v11","k2":"v12",...,"id":1},{"k1":"v21":"k2":"v22",...,"id":2}]
}
预期结果应该是 -
[{"k1":"v11","k2":"v12",...,"k6":"v16","id":1},
{"k1":"v21","k2":"v22",...,"k6":"v26","id":2}]
我的代码-
let selectedHeadings = customData.headings.slice(0, 6);
let array = [];
let temp = {};
customData.tabularData.forEach((eachObj) => {
for (const [key, value] of Object.entries(eachObj)) {
if (
selectedHeadings.find((heading) => heading.id === key) ||
key === "id"
) {
temp[key] = value;
array.push(temp);
}
}
});
console.log(array);
请帮忙。
首先,如果您将选择的标题变成 map,事情会变得更容易
let selectedHeadings = customData.headings.slice(0, 6).reduce((acc, h) => {
acc[h.id] = h;
return acc;
}, {});
除此之外,您将推送到内部循环内的新数组,而不是外部循环。 您还应该在每个外循环内启动一个新的temp
object。 这应该这样做:
let array = [];
customData.tabularData.forEach((eachObj) => {
let temp = {};
for (const [key, value] of Object.entries(eachObj)) {
if (selectedHeadings[key] != undefined || key === "id") {
temp[key] = selectedHeadings[key] || value;
}
}
array.push(temp);
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.