1

以下の多次元配列をループするにはどうすればよいですか?

私はこのような配列を作成しています:

var _cQueue = [[]];

そして、次のようなアイテムを追加します。

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

追加されたすべての異なる電子メールアドレスをループしてから、その電子メールに関連付けられた各ランダム文字列をループしたい

何か案は?

4

2 に答える 2

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);

次に、2 種類のループを使用して繰り返します。

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 に関連付けられた電子メールを見つけたい場合は、次の 2 つのことを行うことができます。

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];
    }
于 2013-03-20T13:55:08.837 に答える
-1

両方のレベルに for-in を使用します。

for(var val in _cQueue){
var obj = _cQueue[val];
   for(var val1 in obj){
    alert('key(email):' + val1 + '\nValue:' + obj[val1]);
   }
}
于 2013-03-20T13:58:23.090 に答える