2016-03-19 5 views
-4

У меня есть массив массив в JS, как:JavaScript: Как распечатать все ключи и значения из массива массивов?

var myArray = new Array(); 

myArray[["abc1"]["efg1"]] = 123; 

myArray[["abc1"]["efg2"]] = 124; 

Как напечатать все ключи и все значения из массива выше?
Ожидаемый результат:

abc1 efg1 123 
abc1 efg2 124 

я могу напечатать значение 123 с этим:
alert(myArray[["abc1"]["efg1"]]);

Я пытался печатать alert(myArray.length);, но это показывает, длина 0, не знаю, почему так может не петля, используя длину. Есть идеи?

+0

Это: 'туАггау [[ "abc1"] [ "efg1"]] = 123;' не является допустимым способом установить значения –

+2

Этот первоначальный код не будет работать , Вы должны создать массив массивов, прежде чем сможете приступить к назначению ему свойств. Кроме того, если вам нужны именованные свойства, вероятно, вы должны использовать объект, а не массив. Массивы также являются объектами, но свойство '.length' в массиве применяется только к числовому свойству с именем, начинающимся с' 0'. Он не учитывает другие именованные свойства. – jfriend00

+0

'console.log (myArray);' и вы увидите, почему это неправильно – GillesC

ответ

1

Предполагая у вас есть объект, как

var a={abc:{efg:[123,124]}} 

вы можете сделать следующее:

for (n in a) 
    for (m in a[n]) 
    a[n][m].forEach(function(v,i){console.log(n,m,i,v);}) 

, чтобы получить выход:

abc efg 0 123 
abc efg 1 124 

Но, как я уже говорил выше , Я только предполагаю ....

Это функция вывода, которая будет работать для этой конкретной структуры объекта. Если вы не уверены в объект, который вы хотите напечатать вы, вероятно, будет лучше использовать что-то вроде

JSON.stringify(a) 

Таким образом, вы получите вам полную структуру объекта в формате JSON

{"abc":{"efg":[123,124]}} 
1

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

function iter(object, path) { 
 
    path = path || []; 
 
    Object.keys(object).forEach(function (k) { 
 
     if (typeof object[k] === 'object') { 
 
      iter(object[k], path.concat(k)); 
 
      return; 
 
     } 
 
     document.write(path.concat(k).join(' ') + ': ' + object[k] + '<br>'); 
 
    }); 
 
} 
 

 
var object = {}; 
 

 
object["abc1"] = {}; 
 
object["abc1"]["efg1"] = 123; 
 
object["abc1"]["efg2"] = 124; 
 
iter(object); 
 

 
document.write('<pre>' + JSON.stringify(object, 0, 4) + '</pre>');

+1

Спасибо! это работает. – cikavladimir

+0

, пожалуйста, посмотрите здесь: http://stackoverflow.com/help/someone-answers –

Смежные вопросы