2013-03-20 4 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

ответ

8

Во-первых, вы не должны добавлять элементы в массивы по ключу, а к объектам. Что означает, что ваш глобальный объект должен быть построен как:

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

Затем вы итерацию с использованием двух видов петель: отличное Working with objects

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 в.


Если вы хотите, чтобы найти адрес электронной почты связан с идентификатором, вы можете сделать две вещи:

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) поставить все идентификаторы в карте, так что он может быть найден быстрее:

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

Как я могу получить письмо, связанное с идентификатором, используя приведенное выше? – Alosyius

+0

_cQueue.length не определено, поскольку это объект – Adidi

+0

@Adidi Нет, это массив. –

0

использовать для в к обоим уровням:

for(var val in _cQueue){ 
var obj = _cQueue[val]; 
    for(var val1 in obj){ 
    alert('key(email):' + val1 + '\nValue:' + obj[val1]); 
    } 
} 
Смежные вопросы