循环遍历数组中的对象

时间:2017-09-13 00:39:49

标签: javascript arrays object

我正在循环通过数组内的二维对象。我目前通过以下方式执行此操作:

我的数组看起来像这样

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()等无法正确处理。
  • 我无法更改数组或其内容的结构
  • 我不需要使用索引(args ij)。

有更好的方法吗?

5 个答案:

答案 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)