循环访问数组中的对象
我正在循环数组中的二维对象。我目前做的方式如下:循环访问数组中的对象
我的阵列看起来像这样
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
s的东西。
值得一提:
- 我用
jQuery.each()
因为这允许通过对象循环,而for()
,.map()
等无法处理正确。 - 我无法更改阵列或其内容的结构
- 我不需要使用索引(参数
i
和j
)。
有没有更好的方法?
这不是一个更好的方法,它更像备用。
for (var i = 0; i < myarray.length; i++)
{
var child_obj = myarray[i].child_obj;
// get the keys of this object
var keys = Object.keys(child_obj);
// loop all those keys
for (var keyi = 0; keyi < keys.length; keyi++)
{
var key = keys[keyi];
// get the objects item based on key;
var item = child_obj[key];
}
}
但在这里您可以直接更改它们的值,因为您正在迭代原始变量。
希望使用下划线-JS库有助于
,你可以做到以下几点:
var first = _.map(myarray, element => { return element.child_obj; });
_.each(first, element => {/*do stuff*/});
这不会循环通过子对象;如果我在*循环中用'first.child_obj'做了一些事情,在我的jQuery.each中,我得到了相同的结果。 – poepje
如果你想沟的jQuery(和它在。每个速度慢),并使用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);
})));
不错,虽然我不确定这对我是否合适。每个对象都有一些属性,其中'child_obj'只是一个(可能应该提到过),并记录它循环的每个属性。此外,如果其中一个第一级别属性具有空值或未定义值,则循环会中断.. – poepje
后面的代码会完成所有操作 –
ÿ OU可以在循环使用的forEach用的内部::
myArray.forEach(function(obj){
for(var i in obj){
// do stuff
}
})
天真递归方法可用于基本类型:
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)
Array.prototype.forEach() – user7951676
@ user7951676你能解释我应该如何使用它来获得第二级对象? – poepje
@JaromandaX你是什么意思? – poepje