当前位置: 代码迷 >> JavaScript >> 如何遍历多维数组并将字段映射到键
  详细解决方案

如何遍历多维数组并将字段映射到键

热度:4   发布时间:2023-06-12 13:40:15.0

我有一个结构如下的对象:

[
  {
    "ID": 34,
    "parent": 0,
    "title": "Level 1 A",
    "children": []
  },
  {
    "ID": 35,
    "parent": 0,
    "title": "Level 1 B",
    "children": [
      {
        "ID": 36,
        "parent": 35,
        "title": "Level 2 A",
        "children": [
          {
            "ID": 37,
            "parent": 36,
            "title": "Level 3 A",
            "children": []
          },
          {
            "ID": 38,
            "parent": 36,
            "title": "Level 3 B",
            "children": []
          }
        ]
      }
    ]
  }
]

我试图遍历它,并使“ title”成为键,所以我最终得到了这一点:

[
  {
    "Level 1 A": {
      "ID": 34,
      "parent": 0,
      "title": "Level 1 A",
      "children": []
    }
  },
  {
    "Level 1 B": {
      "ID": 35,
      "parent": 0,
      "title": "Level 1 B",
      "children": [
        {
          "Level 2 A": {
            "ID": 36,
            "parent": 35,
            "title": "Level 2 A",
            "children": [
              {
                "Level 3 A": {
                  "ID": 37,
                  "parent": 36,
                  "title": "Level 3 A",
                  "children": []
                }

              },
              {
                "Level 3 B": {
                  "ID": 38,
                  "parent": 36,
                  "title": "Level 3 B",
                  "children": []
                }
              }
            ]
          }

        }
      ]
    }
  }
]

我尝试了类似的方法,但是它没有通过子级数组,因此仅更新了1级元素:

    for (var i = 0, l = response.length; i < l; i++) {
        map[response[i].title] = response[i];
    }

我相信我需要使用一些递归,但是我很难弄清楚如何用Javascript完成此工作。 在此先感谢您的任何建议。

您需要将代码更新为以下内容

function updateArray(arr) {
    var updatedResponse = [];
    for (var i = 0, l = arr.length; i < l; i++) {
        var obj = {};
        if(arr[i].children !== undefined) {
            arr[i].children = updateArray(arr[i].children);
        }
        obj[arr[i].title] = arr[i];
        updatedResponse.push(obj);
  }
  return updatedResponse;
}

var updatedArray = updateArray(response);

供参考

要遍历多维数组,您需要多个嵌套的for循环。

for(var i = 0, l = response.length; i < l; i ++){
    for(var j = 0, k = response.length; j < k; j ++){
        //Do some code here
    }
}

一个通用规则是对于数组中的每个维,您都需要另一个循环。

  相关解决方案