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

时间:2015-07-16 16:32:48

标签: javascript jquery arrays json multidimensional-array

我有一个像这样结构的对象:

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

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