2013-03-20 176 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]); 
    } 
}