首页 > 解决方案 > 我如何从对象中存储对象,该对象本身存储在对象数组中的对象(例如下面)中?

问题描述

我是 JavaScript 新手。
我想从嵌套对象创建一个新数组。
我试图说明我的问题的结构。我想将数组中每个对象的子对象中的对象放入一个新数组中。假如:

   [
  {id: 10939, reference_id: 1, name: "A", value: "A", children: {
    1002: {id: 22, reference_id: 22, name: "A!", value: "A1"},
    1013: {id: 23, reference_id: 23, name: "A2", value: "A2"}
  }},
  {id: 10940, reference_id: 2, name: "B", value: "B", children: {
    1014: {id: 33, reference_id: 33, name: "B1", value: "B1"}
  }},
  {id: 10941, reference_id: 3, name: "C", value: "C", children: {
    IN01: {id: 44, reference_id: 44, name: "C1", value: "C1"},
    IN02: {id: 41, reference_id: 42, name: "C2", value: "C2"},
    IN03: {id: 55, reference_id: 22, name: "A!", value: "A1"},
    IN04: {id: 55, reference_id: 55, name: "G2", value: "G2"}
  }}
];

预期的:

[{id: 22, reference_id: 22, name: "A!", value: "A1"},
 {id: 23, reference_id: 23, name: "A2", value: "A2"},
 {id: 33, reference_id: 33, name: "B1", value: "B1"},
 {id: 44, reference_id: 44, name: "C1", value: "C1"},
 {id: 41, reference_id: 42, name: "C2", value: "C2"},
 {id: 55, reference_id: 22, name: "A!", value: "A1"},
 {id: 55, reference_id: 55, name: "G2", value: "G2"}
]

怎么办?

标签: javascriptnode.js

解决方案


.flatMap()将遍历您的数组,并使用函数的返回值形成一个新数组,将最终数组展平

用于destructuring仅选择children条目,然后Object.values仅返回这些条目的值

const data = [
  {id: 10939, reference_id: 1, name: "A", value: "A", children: {
    1002: {id: 22, reference_id: 22, name: "A!", value: "A1"},
    1013: {id: 23, reference_id: 23, name: "A2", value: "A2"}
  }},
  {id: 10940, reference_id: 2, name: "B", value: "B", children: {
    1014: {id: 33, reference_id: 33, name: "B1", value: "B1"}
  }},
  {id: 10941, reference_id: 3, name: "C", value: "C", children: {
    IN01: {id: 44, reference_id: 44, name: "C1", value: "C1"},
    IN02: {id: 41, reference_id: 42, name: "C2", value: "C2"},
    IN03: {id: 55, reference_id: 22, name: "A!", value: "A1"},
    IN04: {id: 55, reference_id: 55, name: "G2", value: "G2"}
  }}
];

const resultFlat = data.flatMap(({children}) => Object.values(children));

console.log(resultFlat);
.as-console-wrapper { max-height: 100% !important; top: 0; }


推荐阅读