2017-09-13 178 views
0

我正在循環數組中的二維對象。我目前做的方式如下:循環訪問數組中的對象

我的陣列看起來像這樣

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()等無法處理正確。
  • 我無法更改陣列或其內容的結構
  • 我不需要使用索引(參數ij)。

有沒有更好的方法?

+0

Array.prototype.forEach() – user7951676

+0

@ user7951676你能解釋我應該如何使用它來獲得第二級對象? – poepje

+0

@JaromandaX你是什麼意思? – poepje

回答

0

這不是一個更好的方法,它更像備用。

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庫有助於

0

,你可以做到以下幾點:

var first = _.map(myarray, element => { return element.child_obj; }); 
_.each(first, element => {/*do stuff*/}); 
+0

這不會循環通過子對象;如果我在頂級循環中用'first.child_obj'做了一些事情,在我的jQuery.each中,我得到了相同的結果。 – poepje

1

如果你想溝的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); 
 
})));

+0

不錯,雖然我不確定這對我是否合適。每個對象都有一些屬性,其中'child_obj'只是一個(可能應該提到過),並記錄它循環的每個屬性。此外,如果其中一個第一級別屬性具有空值或未定義值,則循環會中斷.. – poepje

+0

後面的代碼會完成所有操作 –

0

ÿ OU可以在循環使用的forEach用的內部::

myArray.forEach(function(obj){ 
for(var i in obj){ 
// do stuff 
} 
}) 
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)