javascript - 将具有子数组的对象数组映射并减少到具有父 id 的子数组

标签 javascript arrays node.js lambda

我正在尝试获取像这样的对象数组

[
  {
    "id": "uniqueParentId1",
    "children": [
      {
        "childProp1": "test1",
        "childProp2": "test3"
      }
    ]
  },
  {
    "id": "uniqueParentId2",
    "children": [
      {
        "childProp1": "somevals",
        "childProp2": "other vals"
      },
      {
        "childProp1": "somevals 1",
        "childProp2": "other vals 1"
      }
    ]
  }
]

并返回所有子对象的组合数组,每个子对象都有一个附加值,即父对象的“id”。

上面的例子,结果。

[
  {
    "parentId": "uniqueParentId1",
    "childProp1": "test1",
    "childProp2": "test3"
  },
  {
    "parentId": "uniqueParentId2",
    "childProp1": "somevals",
    "childProp2": "other vals"
  }
  {
    "parentId": "uniqueParentId2",
    "childProp1": "somevals 1",
    "childProp2": "other vals 1"
  }
]

我只是不确定如何处理这个问题。我熟悉扁平化和数组数组。但是我只能在不添加 parentId 的情况下将输出作为原始子项的数组

最佳答案

应该这样做:

var values = [{
    "id": "uniqueParentId1",
    "children": [{
      "childProp1": "test1",
      "childProp2": "test3"
    }]
  },
  {
    "id": "uniqueParentId2",
    "children": [{
        "childProp1": "somevals",
        "childProp2": "other vals"
      },
      {
        "childProp1": "somevals 1",
        "childProp2": "other vals 1"
      }
    ]
  }
];

var result = values.map(value =>
  value.children.map(child => ({ parentId: value.id, ...child }))
).flat();

console.log(result);

代码分解:

child => ({ parentId: value.id , ...child })

接受一个对象并返回一个新对象,该对象具有 parentId 属性和 child 中的所有属性。

输入:

{
    "childProp1": "somevals",
    "childProp2": "other vals"
}

输出:

{
    "parentId": "uniqueParentId2"
    "childProp1": "somevals",
    "childProp2": "other vals"
}

下一个函数:

value =>
    value.children.map(child => ({ parentId: value.id, ...child }))

获取一个名为value 的对象,将上面的函数应用于value.children 中的每个数组元素,并返回一个结果数组。

下一步:

values.map(.....)

将上述函数应用于 values 中的每个元素并返回结果数组。

此时,此 .map() 调用的结果是一个如下所示的数组,原始数组的每个元素都有一个元素:

[
  [
    {
      "parentId": "uniqueParentId1",
      "childProp1": "test1",
      "childProp2": "test3"
    }
  ],
  [
    {
      "parentId": "uniqueParentId2",
      "childProp1": "somevals",
      "childProp2": "other vals"
    },
    {
      "parentId": "uniqueParentId2",
      "childProp1": "somevals 1",
      "childProp2": "other vals 1"
    }
  ]
]

所以我们做的最后一件事是用 .flat() 展平这个数组。

关于javascript - 将具有子数组的对象数组映射并减少到具有父 id 的子数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45740484/

相关文章:

c - 在头文件中通过宏定义数组

c - 切换数组中的两个元素

c - 如何判断数组中是否有两个相等的数字

javascript - 在 while 循环中使用 wait 是一个坏习惯吗

api - 使用 Node JS 代理 http 并修改响应

node.js - Joi 对象键类型

javascript - 我怎样才能让我的圆圈与整个矩形 react ?

javascript - 在对象中搜索媒体文件

javascript - 本地存储的更改未触发事件监听器

javascript - Backbone.js 的初始化顺序