繁体   English   中英

打字稿展平复杂的嵌套数组

[英]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.flatArray.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM