我有一个从这样结构化的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?
});
});
答案 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