2009-07-14 3 views
5

У меня есть массив в JavaScript:Перебор элементов массива в JavaScript,

var array = new array(); 
array[0] = "apples"; 
array[1] = "oranges"; 
array[2] = "pears"; 

В PHP с данного массива, можно использовать следующий цикл по массиву, и дробить ключи и значения:

foreach ($array as $key => $value) { 
    echo("Key is $key and Value is $value"); 
} 

Как это сделать на Javascript? Я знаю:

for (x in array){ 
    // Do something with x. 
} 

Но я не нашел ничего, что бы воспроизвести стиль php foreach. Возможно ли в сжатом виде добиться чего-то подобного в Javascript? (Я также использую jQuery, если что-то можно сделать в jQuery).

+0

Возможный дубликат: http: // stackoverflow.com/questions/1078118/how-to-iterate-over-a-json-structure –

ответ

14

Во-первых,

var array=[]; 

предпочтительнее с помощью "нового".

Во-вторых, ваши ключи являются числами в этом случае, так что вы просто сделать:

for (i=0;i<array.length;i++) { 
    console.log("Key is "+i+" and Value is "+array[i]); 
} 

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


Я использую «console.log», потому что предполагаю, что вы не хотите появляться куча предупреждений. console.log можно заменить тем, что вы используете для записи информации. Вместо этого вы можете использовать alert() или записать текст в div.

+3

Вы должны добавить, что console.log требует firefox с firebug. – ichiban

+0

@ichiban. Хорошая точка зрения. Я отредактировал свой ответ, чтобы упомянуть об этом. – Nosredna

+0

Ответ заключается в том, чтобы использовать Javascript Objects, тогда, как кажется, мне требуется нечто более гибкое, чем стандартный массив. (Мои массивы генерируются динамически и содержат значения, которые не являются числовыми). Спасибо за ответ. – EvilChookie

0

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

var i = array.length; 
while(i--) { 
    console.log("key is " + i + " and value is " + array[i]); 
} 

Этот подход работает, потому что число 0 вычисляется как false в JavaScript.

8

Использование jQuery.each вы могли бы написать что-то подобное (не проверено):

jQuery.each(array, function(k,v) { 
    console.log("K: "+,k," V:",v); 
}); 
+0

За исключением этого потребуется jQuery ... –

+7

как запрошено в вопросе. – SilentGhost

0

Jquery не требуется для такого рода задач, он может просто использовать цикл, что это целесообразно способ Переберите массив в JS. Вы можете прочитать link text для получения более подробной информации

1

Посмотрите на underscorejs.org - с ним вы делаете это так:

_.each(array, function(element, index, array) { 
    doSomething(item, index); 
}); 

Он используется backbonejs и многих других рамок/библиотек, как метеор, например, Он имеет 80 или около того чрезвычайно полезных функций - если вы серьезно относитесь к javascript, за 30 минут прочитайте всю страницу подчеркивания, вы никогда не захотите кодировать ничего, кроме javascript.

1
for (x in array){ 

    var arrayItem = array[x] 

} 

Этот тип цикла работает, но дает позицию массива, а не элемент из самого массива. Это довольно краткий и я использую его все время

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