如何访问多级对象数组?

时间:2017-04-11 18:02:59

标签: javascript arrays arraylist javascript-objects

通过查看“Array”图像,我该如何访问此阵列的所有级别?

我试过做一个foreach但这只允许我访问第一个对象,我无法访问填充了字符串的第二个对象。

    for (var key in result)
  {
     if (result.hasOwnProperty(key))
        {
          console.log(key, result[key]);

              for(var item in result[key])
                {
                  console.log(item);
                 }
          }
}

我也尝试过:

result[key[item]]

但它似乎是不分化的。

我知道通过名称访问所有元素很容易,但名称不断变化,因此解决方案应该是动态的。

我在评论中添加了演示以查看行为。

2 个答案:

答案 0 :(得分:0)

Object.keys(obj)返回obj中的键数组。



var obj = {
  a: 1,
  b: 2,
  m: 3,
  x: 4,
  y: 5,
  z: 6
}

//get all the keys in an array:
var keys = Object.keys(obj)
console.log("keys: " + keys);

//iterate through the object by its keys:
for (var i = 0; i < keys.length; i++){
  console.log("key " + keys[i] + " has value " + obj[keys[i]]);
}
&#13;
&#13;
&#13;

根据您的评论进行更新

我认为您要求将此解决方案应用于任意深度的对象。我的解决方案是将前一个技巧包装在一个函数中,并在有嵌套对象的情况下递归调用它:

&#13;
&#13;
var obj = {
  a: {foo:"bar",foof:"barf"},
  b: 2,
  m: 3,
  x: {baz:{really:{more:{objects: "yeah, there could be a lot"}}}},
  y: 5,
  z: 6
}

function getKeysDeep(obj,prefix){
  //get all the keys in an array:
  var keys = Object.keys(obj)
  //console.log(prefix + "keys: " + keys);

  //iterate through the object by its keys:
  for (var i = 0; i < keys.length; i++){
    if (obj[keys[i]] !== null && typeof obj[keys[i]] === 'object') {
      console.log("key " + keys[i] + "'s value is an object");
      getKeysDeep(obj[keys[i]],prefix + keys[i] + ": ");
    } else {
      console.log(prefix + "key " + keys[i] + " has value " + obj[keys[i]]);
    }
  }
}

getKeysDeep(obj,"")
&#13;
&#13;
&#13;

答案 1 :(得分:0)

这个循环也有效!

Object.keys(result).forEach(function (key) {
      console.log(result[key]);
      var test = result[key];
      Object.keys(test).forEach(function (key) {
         console.log(test[key]);
         var testTwo = test[key];
          Object.keys(testTwo).forEach(function (key) {
            console.log(testTwo[key]);
            var testThree = testTwo[key];
          });
       });
    });

但@nvioli答案更准确。