2010-08-24 2 views
9
var array1 = {}; 

array1['one'] = new Array(); 
array1['one']['data'] = 'some text'; 
array1['one']['two'] = new Array(); 
array1['one']['two']['three'] = new Array(); 
array1['one']['two']['three']['data'] = 'some other text'; 

$.each(array1, function(key1, value1){ 
    $.each(value1['two']['three'], function(key1, value1){ 
     document.write('test'); 
    } 
}); 

все работает, за исключением того, что оно не попадает на document.write. Кто-нибудь задумал почему?jquery.each многомерная матрица

+1

Те * * not ** Массивы, которые вы используете там, но обычные объекты. Не используйте 'new Array()' но 'new Object()' (или просто '{}' для «пустого» объекта). – RoToRa

ответ

8

Обратите внимание, что Array() замена ключ здесь с недостающим «)»

var array1 = {}; 

array1['one'] = new Object(); 
array1['one']['data'] = 'some text'; 
array1['one']['two'] = new Object(); 
array1['one']['two']['three'] = new Object(); 
array1['one']['two']['three']['data'] = 'some other text'; 

$.each(array1, function(key1, value1) { 
    $.each(value1['two']['three'], function(key1, value1) { 
     document.write('test'); 
    }); 
}); 

и другой способ написать то же самое: (маленький Твик на записи, чтобы ссылаться на ваш объект)

var array1 = {}; 

array1.one = new Object(); 
array1.one.data = 'some text'; 
array1.one.two = new Object(); 
array1.one.two.three = new Object(); 
array1.one.two.three.data = 'some other text'; 


$.each(array1, function(key1, value1) { 
    $.each(value1['two']['three'], function(key1, value1) { 
     document.write('test' + array1.one.data); 
    }); 
}); 

И, наконец, с устаревшим новый объект() замена:

var array1 = {}; 

array1['one'] = {} 
array1['one']['data'] = 'some text'; 
array1['one']['two'] = {}; 
array1['one']['two']['three'] = {}; 
array1['one']['two']['three']['data'] = 'some other text'; 

$.each(array1, function(key1, value1) { 
    $.each(value1['two']['three'], function(key1, value1) { 
     document.write('test'); 
    }); 
}); 

EDIT: некоторые забавные остроумие ч ваш массив, и поэтому вы можете иметь строки в объявлении объекта, как у вас есть:

var array1 = {}; 
var fun="four"; 
array1.one = {}; 
array1.one.data = 'some text'; 
array1.one.two = {}; 
array1.one.two.three = {}; 
array1.one.two.three.data = 'some other text'; 
array1.one.two[fun] = {}; 
array1.one.two[fun].data=' howdy'; 

$.each(array1, function(key1, value1) { 
    $.each(value1.two.three, function(key1, value1) { 
     document.write('test'+array1.one.two[fun].data+ ":"+key1+":"+value1); 
    }); 
}); 

результат, тем последний является: «тест здор`ово: данные: какой-либо другой текст»

+1

Ну, это не ДЕЙСТВИТЕЛЬНО массив, но все равно забавно :) wit h ваш объект array1! –

+0

У вас слишком много удовольствия. :) –

+1

Я сопротивляюсь размещать больше «забавных» способов объявить этот набор объектов :) –

1

document.write не работает, как у Вас есть ошибка синтаксиса, так что поток код никогда не получает к нему - вам нужен другой кронштейн в конце вашего each, т.е.

$.each(array1, function(key1, value1){ 
    $.each(value1['two']['three'], function(key1, value1){ 
     document.write('test'); 
    }) 
}); 

Если вы я собираюсь сделать какую-то нетривиальную работу с javascript, я бы настоятельно рекомендовал вам использовать Firefox с установленным Firebug - это консоль выделяет такие ошибки, которые в противном случае потерпят неудачу, если вы не осознаете, что верит, что все работает нормально ,

+1

Да на платформе или в другом браузере, но, по крайней мере, фиксируйте данные об ошибках в Webpage, как я сделал, щелкнув по нотации ошибки в окне IE, дважды щелкнув ее в строке состояния: User Agent: Mozilla/4.0 (совместимый MSIE 7.0, Windows NT 5.1, Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; MDDR; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; InfoPath.2; OfficeLiveConnector.1.3; OfficeLivePatch.0.0) Временная метка: Вт, 24 авг. 2010 15:28:09 UTC Сообщение: Ожидаемое ')' –

+1

, которое все еще не попадает на document.write, как вы видите здесь: jsfiddle .net/yPYWd –

1

Вы пропустите ) во втором each.

+1

, который до сих пор не попал в document.write, как вы видите здесь: http://jsfiddle.net/yPYWd/ –

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