循环遍历此数组结构的最佳方法

时间:2015-01-05 13:13:48

标签: javascript jquery arrays

我有一个从这样结构化的API返回的数组:

{
    user:[
        {key1:[
            {sub_key1:value1},
            {sub_key2:value2}
            ]
        },
        {key2:[
            {sub_key1:value1},
            {sub_key2:value2}
            ]
        },
    ]
}

我需要循环使用每个'值的事情。

目前我有:

$.each(user, function(key,value){
    $.each(value, function(i, val){
        //inside each key:value pair, nice
        //but how do i get the value of this pair, without knowing the key?

    });

});

4 个答案:

答案 0 :(得分:0)

使用for循环迭代:

for(var key1 in user)
    for(var key2 in user[key1])
        alert("key: " + key2 + " value: " + user[key1][key2]);

答案 1 :(得分:0)

这将在您给定的数据结构中循环可能的值:



var obj = {
  user: [{
    key1: [{
      sub_key1: 'value1'
    }, {
      sub_key2: 'value2'
    }]
  }, {
    key2: [{
      sub_key1: 'value1'
    }, {
      sub_key2: 'value2'
    }]
  }, ]
};

Object.keys(obj).forEach(function (key) {
  obj[key].forEach(function (userItem) {
    Object.keys(userItem).forEach(function (numberedKey) {
      userItem[numberedKey].forEach(function (numberedKeyItem) {
        Object.keys(numberedKeyItem).forEach(function (subKey) {
          console.log(numberedKeyItem[subKey]);
        });
      });
    });
  });
});




答案 2 :(得分:0)

尝试以下方法:

Object.keys(user).forEach(function (key) {
    user[key].forEach(function (subKey) {
        Object.keys(subKey).forEach(function (subKeyName) {
            console.log(subKeyName + ':' + subKey[subKeyName]);
        }); 
    });
});

答案 3 :(得分:0)

这适用于任何给定的任意 Object 基元类型。这是使用递归遍历和JavaScript的内置类型运算符的典型情况。它传递类型,键层次结构和值。

function recursiveCallFn(nameStack, value, fn) {
    var type = typeof value;

    if (type === 'string' || type === 'number' || type === 'boolean') {
        fn(type, value, nameStack);
    }

    if (type === 'object') {
        Object.keys(value).forEach(function (key) {
            nameStack.push(key);
            recursiveCallFn(nameStack, value[key], fn);
            nameStack.pop(key);
        });
    }
}
回调应该是以下原型:

function (type, value, nameStack) {}

并将其命名为:

recursiveCallFn([], data, function (type, value, nameStack) {
    // do something...
});

这是一个有效的JSFiddle example

对于您的示例数据,输出为:

string user[0].key1[0].sub_key1 value1
string user[0].key1[1].sub_key2 value2
string user[1].key2[0].sub_key1 value1
string user[1].key2[1].sub_key2 value2