在Javascript中循环遍历三重嵌套对象
Looping through a triple nested object in Javascript
我声明了一个三重嵌套对象,如下所示:
var food = {
"fruit": {
"apples": {
"redApples": 20,
"greenApples": 30
},
"bananas": {
"yellowBananas": 10
}
},
"grains": {
"bread": {
"brownBread": 50
}
}
};
我发现了这个问题,它适用于迭代对象的对象,但我被卡住了。我该如何遍历这个对象?
Update:对于这个特定的问题,嵌套的For循环可以很好地工作,像这样:
for(var key in food)
for(var prop in food[key])
for(var foo in food[key][prop])
console.log(food[key][prop][foo]);
然而,下面有一些很好的递归函数可以为无限嵌套的对象做这件事。
Martin是对的,递归函数就是方法。你的函数应该检查属性是否是一个对象。如果是的话,函数必须通过调用自己来更深入,但是要使用嵌套的对象。
function recursiveIter(obj){
for (var i in obj){
if (typeof obj[i]=="object"){
recursiveIter(obj[i]);
}
else {
$('.ins').append(obj[i]); // or what do you want to do with that
}
}
}
recursiveIter(food);
你可以创建一个通用函数,它接受一个对象和一个回调函数,然后进行递归调用。
function objectWalk (obj, callback){
for(o in obj){
if(typeof obj[o] === 'object'){
objectWalk(obj[o], callback);
}else {
callback(obj[o]);
}
}
}
我在这里所做的是遍历对象并检查循环中的每个项是否为对象。如果是,则再次调用相同的函数。如果没有,则将对象的值传递给回调函数。这是一个方便的小函数。
像这样?
walk = function(obj, fn, key) {
if(typeof obj != "object")
return fn(obj, key)
for(var p in obj)
if(obj.hasOwnProperty(p))
walk(obj[p], fn, p)
}
或者更简洁地使用ES5函数:
walk = function(obj, fn, key) {
return obj === Object(obj) ?
Object.keys(obj).forEach(function(p) { walk(obj[p], fn, p) }) :
fn(obj, key);
}
的例子:
var food = {
"fruit": {
"apples": {
"redApples": 20,
"greenApples": 30
},
"bananas": {
"yellowBananas": 10
}
},
"grains": {
"bread": {
"brownBread": 50
}
}
};
walk(food, console.log.bind(console))
结果:20 "redApples"
30 "greenApples"
10 "yellowBananas"
50 "brownBread"
相关文章:
- 用嵌套函数和默认函数定义函数
- 如何在ReactJS JSX中执行嵌套的if-else语句
- 三层嵌套引号的问题
- 如何重置嵌套ng重复
- 嵌套 For 循环以重置单选组
- 在 JavaScript 中查找嵌套的重复数组.(嵌套数组 uniq in lodash/underscore)
- 对象中的嵌套重复数组
- 嵌套表,三个级别.(NG-重复孙子孙女?
- 重命名数组的嵌套键
- 在三个.js中嵌套WebGLRenderTarget
- Knockoutjs foreach第三个嵌套级别不起作用
- 使用取消按钮重置嵌套单选按钮选择
- 如何在javascript和ap.net中相互放置嵌套引号三次
- 在Javascript中循环遍历三重嵌套对象
- JS作用域约定用于第三个(或更多)嵌套作用域
- 如何从两次或三次嵌套的ng-repeat作用域访问控制器的作用域
- JavaScript的第三个嵌套引用级别
- angular中的三层嵌套url
- 如何隐藏第三个嵌套列表在这个css下拉嵌套列表
- 用ui-router重定向到AngularJS中的默认嵌套状态