【发布时间】:2020-07-11 14:51:03
【问题描述】:
我正在尝试编写一个接受嵌套对象数组并动态返回展平结果的函数。 arrayProperties.filter() 没有像我期望的那样返回对象数组。
const data = [
{
parKeyA: "parValA",
parKeyA1:
{chiKeyA1: "chiValA1", chiKeyA2: "chiValA2"},
parKeyA2: {chiKeyA3: "chiValA3"}
},
{
parKeyB: "parValB",
parKeyB1:
{chiKeyB1:"chiValB1"}
}
]
flatData = flatNestedObjArray(data);
console.log(flatData);
function flatNestedObjArray(array) {
let flatArray = array.map(element => {
let arrayProperties = Object.entries(element);
//filter not returning array of objects
let nestedObjects = arrayProperties.filter(property => {
const parentValue = property[1];
if (typeof parentValue === "object" && parentValue !== null) {
return parentValue;
}
});
//nestedObjects should be array of objects
let merged = nestedObjects.map(obj => element.concat(obj));
return merged;
});
return flatArray;
}
预期结果:
const data = [
{
parKeyA: "parValA",
chiKeyA1: "chiValA1",
chiKeyA2: "chiValA2",
chiKeyA2: "chiValA2"
},
{
parKeyB: "parValB",
chiKeyB1:"chiValB1"
}
]
【问题讨论】:
-
Flatten 与数组而非对象有关。前任。
[1, 2, 3]变平为1, 2, 3。此外,具有重复键的对象无效。前任。chiKeyA2在第一个对象中出现两次。 -
@zer00ne 修复了 dup 键...你会怎么称呼它?另外,您对如何解决问题有任何帮助吗?
-
看看你所期望的......模式如下所示: 1. 对象中的每个对象都必须将它们的键/值移动到父对象。 2. 然后删除空对象。这没有多大意义......但如果这是你真正想要的,有办法做到这一点。我会发布一个答案。
-
感谢您的回答都很好,选择的答案有点短!
标签: javascript arrays nested-object