【问题标题】:How to loop through multidimensional array and map field to key如何循环遍历多维数组并将字段映射到键
【发布时间】:2015-07-16 16:32:48
【问题描述】:

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

[
  {
    "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": []
          }
        ]
      }
    ]
  }
]

我正在尝试遍历它并将“标题”作为关键,所以我最终得到了这个:

[
  {
    "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 来完成这项工作。提前感谢您的任何建议。

【问题讨论】:

    标签: javascript jquery arrays json multidimensional-array


    【解决方案1】:

    您需要将您的代码更新为以下

    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);
    

    供参考 - http://plnkr.co/edit/bXloL9VHxuxzOlZkHBTe?p=preview

    【讨论】:

    • 谢谢@nikhil。我检查了 plnkr 链接,但它似乎没有在子数组中添加新键,这就是我想要做的。适用于 1 级元素。
    • @MThomas,我错过了那部分。您需要以与响应相同的方式进行操作。让我更新答案。
    • @MThomas - 我已经更新了答案,请查看。
    【解决方案2】:

    要遍历多维数组,您需要多个嵌套的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
        }
    }
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-15
      • 1970-01-01
      • 2013-04-01
      相关资源
      最近更新 更多