我正在循环通过数组内的二维对象。我目前通过以下方式执行此操作:
我的数组看起来像这样
var myarray = [
0: {
child_obj: {}
}
1: {//etc}
];
我循环遍历像这样的第二级对象
jQuery.each(myarray, function(i, first) {
jQuery.each(first.child_obj, function(j, second) {
//do stuff
}
});
});
这就是循环中的循环。它工作正常,但它看起来不是很整洁,我觉得可能有更好(和更短)的方式来做到这一点。
我这样做的原因是因为我需要对所有child_obj
进行处理。
值得一提:
jQuery.each()
因为这允许循环遍历对象,而for()
,.map()
等无法正确处理。 i
和j
)。有更好的方法吗?
答案 0 :(得分:1)
如果你想放弃jquery(并且它在.each中的速度很慢)并使用ES2015 +
var myarray = [
{
child_obj: {a:1,b:2,c:3}
},
{
child_obj: {a:4,b:5,c:6},
child_obj2: {a:7,b:8,c:9}
}
];
// specific rewrite of your code would be
myarray.forEach(obj => Object.values(obj.child_obj).forEach(value => {
console.log(value);
}));
console.log('-------');
// other examples
myarray.forEach(obj => Object.values(obj).forEach(value => {
// do things with each "child object"
console.log(value);
}));
myarray.forEach(obj => Object.values(obj).forEach(child => Object.values(child).forEach(value => {
// do things with each property in each child object
console.log(value);
})));

答案 1 :(得分:0)
这不是更好的方式,它更像是替代方式。
{{1}}
但是在这里你可以在迭代原始变量时直接改变它们的值。
希望有所帮助
答案 2 :(得分:0)
使用underscore-js库,您可以执行以下操作:
var first = _.map(myarray, element => { return element.child_obj; });
_.each(first, element => {/*do stuff*/});
答案 3 :(得分:0)
你可以在for ::循环里面使用forEach ::
myArray.forEach(function(obj){
for(var i in obj){
// do stuff
}
})
答案 4 :(得分:0)
朴素递归方法可用于原始类型:
function forEachPrimitive(o, f, k) { if (o !== Object(o)) f(k, o)
else for (k in o) forEachPrimitive(o[k], f, k) }
var obj = [ { x: { a: '0', b: true, c: 2 } },
{ y: { d: /3/, e: null, f: undefined } } ]
forEachPrimitive(obj, console.log)