假设我有一个包含多个对象的数组,如下所示:
{
"firstname": John,
"lastname": "Doe",
"numbers": [{
"id": 1,
"value": "123"
}, {
"id": 2,
"value": "123"
}],
}, ...
如何在循环浏览“数字”属性的同时循环遍历这些对象?
答案 0 :(得分:1)
嵌套循环:
var input = [{
"firstname": John,
"lastname": "Doe",
"numbers": [{
"id": 1,
"value": "123"
}, {
"id": 2,
"value": "123"
}],
}]
input.forEach(function(item) {
item.numbers.forEach(function(number) {
console.log(number.id, number.value)
}
}
答案 1 :(得分:1)
var input = {
"firstname": "John",
"lastname": "Doe",
"numbers": [{
"id": 1,
"value": "123"
}, {
"id": 2,
"value": "123"
}]
}
for (var key in input) {
if (key === "numbers") {
for (var i=0; i < input[key].length; i++) {
console.log(input[key][i]);
}
} else {
console.log(key + ":" + input[key])
}
}
&#13;
答案 2 :(得分:1)
这个使用递归,所以即使模式不相同它也会起作用:
function looopAllTheThings(theThings, theCallback, depth){
if(undefined===depth) depth = 0;
if(typeof theThings == "object"){
for(var p in theThings)
if(theThings.hasOwnProperty(p))
if("object" == typeof theThings[p] ||
"array" == typeof theThings[p])
looopAllTheThings(theThings[p], theCallback, (depth+1));
else theCallback(p, theThings[p], depth);
}else if(typeof theThings == "array"){
for(var i=0; i<theThings.length; i++)
if("object" == typeof theThings[i] ||
"array" == typeof theThings[i])
looopAllTheThings(theThings[i], theCallback, (depth+1));
else theCallback(p, theThings[i], depth);
}else{
theCallback(null, theThings, depth);
}
}
像这样使用:
looopAllTheThings(data, function(key, value, depth){
document.getElementById('out').innerHTML += ("-".repeat(depth))+" "+key+" = "+value+"<br>";
});
这是一个小提琴:https://jsfiddle.net/2o2Lyayj/