2013-03-20 174 views
1

如何循環通過下面的多維數組?通過多維數組循環

我創建數組是這樣的:

var _cQueue = [[]]; 

和添加項目是這樣的:

var valueToPush = new Array(); 
valueToPush['[email protected]'] = '1234567'; 
_cQueue.push(valueToPush); 

我通過添加了所有不同的電子郵件不會忽略,然後每個隨機字符串要循環與電子郵件

任何想法有關?

+0

http://stackoverflow.com/questions/4909218/placing-a-multi-dimensional-array-into-javascript-from-php-using-json ...從這個答案中看到,你應該得到它 – theshadowmonkey 2013-03-20 13:56:11

回答

8

首先,你不應該的關鍵元素添加到數組,但對象。這意味着你的全局對象應建立:

var _cQueue = []; 
var valueToPush = {}; // this isn't an array but a js object used as map 
valueToPush['[email protected]'] = '1234567'; 
_cQueue.push(valueToPush); 

然後,你遍歷採用兩種循環:

for (var i=0; i<_cQueue.length; i++) { // iterate on the array 
    var obj = _cQueue[i]; 
    for (var key in obj) { // iterate on object properties 
     var value = obj[key]; 
     console.log(value); 
    } 
} 

見MDN的優秀Working with objects


如果你想找到相關聯的ID的郵件,你可以做兩件事情:

1)循環,直到你找到它:

function find(id) { 
    for (var i=0; i<_cQueue.length; i++) { // iterate on the array 
     var obj = _cQueue[i]; 
     for (var key in obj) { // iterate on object properties 
      var value = obj[key]; 
      if (value==id) return key; 
     } 
    } 
} 

2)把所有的IDS在一張地圖,這樣可以更快地發現:

var bigMap = {}; 
    for (var i=0; i<_cQueue.length; i++) { // iterate on the array 
     var obj = _cQueue[i]; 
     for (var key in obj) { // iterate on object properties 
      bigMap[obj[key]] = key; // maps the id to the email 
     } 
    } 
    function find(id) { 
     return bigMap[id]; 
    } 
+0

如何使用上述方式獲取與ID相關的電子郵件? – Alosyius 2013-03-20 13:58:34

+0

_cQueue.length是未定義的,因爲它的對象 – Adidi 2013-03-20 13:58:37

+0

@Adidi不,它是一個數組。 – 2013-03-20 13:58:59

0

使用了,在這兩個級別:

for(var val in _cQueue){ 
var obj = _cQueue[val]; 
    for(var val1 in obj){ 
    alert('key(email):' + val1 + '\nValue:' + obj[val1]); 
    } 
}