尝试循环嵌套的JSON

时间:2017-01-05 20:20:34

标签: javascript jquery

我有这样的数组:

var jsonObj = {
  "name": "my boards",
  "children": [
    {
      "name": "AAA",
      "children": [
        {
          "name": "AAA_2",
          "size": 422
        },
        {
          "name": "AAA_2",
          "size": 422
        },
        {
          "name": "AAA_2",
          "size": 422
        }
      ]
    },
    {
      "name": "BBB",
      "children": [
        {
          "name": "BBB_2",
          "size": 422
        },
        {
          "name": "BBB_2",
          "size": 422
        },
        {
          "name": "BBB_2",
          "size": 422
        }
      ]
    },
    {
      "name": "CCC",
      "children": [
        {
          "name": "CCC_2",
          "size": 422
        },
        {
          "name": "CCC_2",
          "size": 422
        },
        {
          "name": "CCC_2",
          "size": 422
        }
      ]
    }
  ]
}

我想用jquery用divs中的值填充这个对象。我想我得到的点和括号错了。我正在尝试这个:

function fill_object() {
  $.each($('.my_div'), function() {
    jsonObj.children["name"] = $(this.id).value();
    jsonObj.children.children["name"] = $(this.id).value();
  });
  return (jsonObj)
}

但是我收到以下错误:

Uncaught TypeError: Cannot read property 'children' of undefined

我希望能够为AAA,AAA_2,BBB,BBB_2,CCC和CCC_2添加值

1 个答案:

答案 0 :(得分:1)

正如您在评论中提到的那样,这就是您所寻求的(因为我不确定您的要求,所以没有回答)

所以问题是你需要像

这样的嵌套循环
for(var i = 0; i < jsonObj.children.length; i++) {
    console.log(jsonObj.children[i].name); //outputs name

  for(var j = 0; j < jsonObj.children[i].children.length; j++) {
    console.log(jsonObj.children[i].children[j].name); //outputs nested children names
  }
}

在这里,首先循环jsonObj.children,之后,我正在嵌套另一个for循环来迭代嵌套数组,该数组还包含name作为键的对象。

您可以通过执行类似

的操作在此处进行小规模优化
for(var i = 0, l = jsonObj.children.length; i < l; i++)

因此,我们只计算length array一次。您可以为嵌套循环执行相同的操作。