首页 > 解决方案 > 如何从嵌套数组中获取单个名称属性?

问题描述

我正在开发 Angular 项目,我需要从给定的嵌套数组对象中获取名称属性。_.map('ArrayName',(o)=>o.name);我在这里尝试使用 lodash 地图功能,我只收到 [ Peter, Andy ]结果。我想要这样的所有名称属性[Peter, Andy, Mills, mac, Teddy]。有人可以指导我如何做到这一点。

[{
"id": "1",
"name": "Peter",
"children": []}
,{
"id": "2",
"name": "Andy",
"children": [
  {
    "id": "3",
    "name": "Mills",
    "children": []
  },
  {
    "id": "4",
    "name": "Mac",
    "children": [
      {
        "id": "5",
        "name": "Teddy",
        "children": []
      }
    ]
  }
]}]

标签: javascriptarraysangularlodasharrayobject

解决方案


您需要children递归访问嵌套数组。

这是一个使用Array.prototype.flatMap()andspread syntax递归迭代每个子数组并展平结果的示例。

const input = [{ "id": "1", "name": "Peter", "children": [] }, { "id": "2", "name": "Andy", "children": [{ "id": "3", "name": "Mills", "children": [] }, { "id": "4", "name": "Mac", "children": [{ "id": "5", "name": "Teddy", "children": [] }] }] }];

const recursivelyGetProp = (arr, prop) => (
  arr.flatMap(({ children, [prop]: p }) =>
    [p, ...(children.length ? recursivelyGetProp(children, prop) : [])]
  ));

console.log(recursivelyGetProp(input, 'name'));


推荐阅读