首页 > 解决方案 > 从数组子元素的父元素创建一个新数组

问题描述

我有以下数组

{
  "id": "111",
  "name": "1111",
  "children": [
    {
      "id": "22222",
      "name": "2222",
      "children": [
        {
          "id": "AAAA",
          "name": "AAAA",
          "children": [
            {
              "id": "DDD",
              "name": "DDD"
            },
            {
              "id": "EEE",
              "name": "EEE"
            }
          ]
        },
        {
          "id": "BBBB",
          "name": "BBB",
          "children": [
            {
              "id": "FFF",
              "name": "FFF"
            },
            {
              "id": "GGG",
              "name": "GGG",
              "children": [
                {
                  "id": "7777",
                  "name": "7777"
                },
                {
                  "id": "8888",
                  "name": "8888"
                }
              ]
            }
          ]
        }
      ]
    }
  ]
}

我想通过其 ID 创建一个包含孩子父母的数组。

因此,例如,如果我想获得 ID 为“FFF”的孩子的路径,那么数组将如下所示:

["1111", "2222", "BBB", "FFF"]

我怎么能这样做呢?

标签: javascriptarrays

解决方案


您可以采用迭代和递归的方法。

function getItems({ children, ...object }, key, value) {
    var temp;
    if (object[key] === value) return [object];
    if (children) children.some(o => temp = getItems(o, key, value));
    return temp && [object, ...temp];
}

var data = { id: "111", name: "1111", children: [{ id: "22222", name: "2222", children: [{ id: "AAAA", name: "AAAA", children: [{ id: "DDD", name: "DDD" }, { id: "EEE", name: "EEE" }] }, { id: "BBBB", name: "BBB", children: [{ id: "FFF", name: "FFF" }, { id: "GGG", name: "GGG", children: [{ id: "7777", name: "7777" }, { id: "8888", name: "8888" }] }] }] }] };

console.log(getItems(data, 'id', 'FFF'));
.as-console-wrapper { max-height: 100% !important; top: 0; }


推荐阅读