[英]Typescript flatten complex nested array
我对 Typescript 还是很陌生,所以我一直在查看所有提供的解决方案,但我仍然坚持使用复杂的嵌套数组。 我有以下结构:
data = [{
"property1_1": "value1_1",
"property1_2": "value1_2",
"property1_3": [
[{
"subproperty1_1_1": "subvalue1_1_1",
"subproperty1_1_2": "subvalue1_1_2"
}],
[{
"subproperty1_2_1": "subvalue1_2_1",
"subproperty1_2_2": "subvalue1_2_2"
}]
]
},
{
"property2_1": "value2_1",
"property2_2": "value2_2",
"property2_3": [
[{
"subproperty2_2_1": "subvalue2_2_1",
"subproperty2_2_2": "subvalue2_2_2"
}],
[{
"subproperty2_2_1": "subvalue2_2_1",
"subproperty2_2_2": "subvalue2_2_2"
}]
]
}
]
我想实现一个简单的数组,其中的对象如下所示:
data = [{
"property1_1": "value1_1",
"property1_2": "value1_2",
"subproperty1_1_1": "subvalue1_1_1",
"subproperty1_1_2": "subvalue1_1_2",
"subproperty1_2_1": "subvalue1_2_1",
"subproperty1_2_2": "subvalue1_2_2"
},
{
"property2_1": "value2_1",
"property2_2": "value2_2",
"subproperty2_1_1": "subvalue2_1_1",
"subproperty2_1_2": "subvalue2_1_2",
"subproperty2_2_1": "subvalue2_2_1",
"subproperty2_2_2": "subvalue2_2_2"
}
]
我已经实现了将子属性收集到一个数组中,如下所示:
const allDataConv = [];
data.forEach(dateninput => {
dateninput.propertyname.forEach(item => {
item.forEach(lastitem => {
allDataConv.push({key: lastitem.description, title: lastitem.name});
});
});
});
return allDataConv;
但这不是我想要达到的目标。 我被这个问题困住了:如何将双重嵌套对象应用到相应的父对象中?
您可以遍历对象键并检查该值是否为数组。 如果它是一个数组,请使用flat(1)
将其展平,然后迭代它的孩子。 使用Object.assign
将子对象键添加到您的根对象并删除将数组作为值的键。
Array.flat
是Array.flat
的一个特性,你可能需要在旧浏览器中使用 polyfill 或者使用另一个 for-of 循环。
const input = data = [ { "property1_1": "value1_1", "property1_2": "value1_2", "property1_3": [ [ { "subproperty1_1_1": "subvalue1_1_1", "subproperty1_1_2": "subvalue1_1_2" } ], [ { "subproperty1_2_1": "subvalue1_2_1", "subproperty1_2_2": "subvalue1_2_2" } ], ], }, { "property2_1": "value2_1", "property2_2": "value2_2", "property2_3": [ [ { "subproperty2_1_1": "subvalue2_2_1", "subproperty2_1_2": "subvalue2_2_2" } ], [ { "subproperty2_2_1": "subvalue2_2_1", "subproperty2_2_2": "subvalue2_2_2" } ] ] } ]; function transformData(input) { return input.map(obj => { for(const prop in obj) { if(obj.hasOwnProperty(prop) && Array.isArray(obj[prop])) { for(const subObj of obj[prop].flat(1)) { Object.assign(obj, subObj); delete obj[prop]; } } } return obj; }) } console.log(transformData(input));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.