循环遍历多维数组

时间:2013-03-20 13:52:51

标签: javascript

如何在下面的多维数组中循环?

我正在创建这样的数组:

var _cQueue = [[]];

并添加以下内容:

var valueToPush = new Array();
valueToPush['unique_email@gmail.com'] = '1234567';
_cQueue.push(valueToPush);

我想遍历添加的所有不同电子邮件地址,然后遍历与该电子邮件关联的每个随机字符串

有什么想法吗?

2 个答案:

答案 0 :(得分:8)

首先,不应该按键添加元素到数组,而应添加到对象。这意味着您的全局对象应该构建为:

var _cQueue = [];
var valueToPush = {}; // this isn't an array but a js object used as map
valueToPush['unique_email@gmail.com'] = '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)将所有ID放在地图中,以便更快地找到它:

   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];
    }

答案 1 :(得分:0)

使用for-in到两个级别:

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