Как перебрать массив в jQuery?



Я пытаюсь перебрать массив. У меня есть следующий код:



 var substr = currnt_image_list.split(','); //This will split up 21,32,234,223,


Я пытаюсь получить все данные из массива. Может кто-нибудь привести меня на правильный путь пожалуйста?

1400   7  

7 ответов:


(Обновление: Мой ответ тут излагает параметры, отличные от jQuery, гораздо более тщательно. Третий вариант ниже jQuery.each, не в нем.)


три варианта:

универсальные петли:

var i;
for (i = 0; i < substr.length; ++i) {
    // do something with `substr[i]`
}

преимущества: прямо вперед, без зависимости от jQuery, легко понять, нет проблем с сохранением значения this в теле цикла, нет ненужных накладных расходов на вызовы функций (например, в теория быстрее, хотя на самом деле вы должны были бы иметь столько элементов, что шансы у вас были бы другие проблемы; подробности).

в ES5 это forEach:

по состоянию на ECMAScript5, массивы имеют forEach функция на них, которая позволяет легко перебирать массив:

substr.forEach(function(item) {
    // do something with `item`
});

ссылка на документы

(Примечание: есть много других функций, а не просто forEach; см. в ответ, указанный выше для сведения.)

преимущества: декларативный, может использовать предварительно построенную функцию для итератора, если у вас есть один удобный, если ваше тело цикла является сложным, область действия вызова функции иногда полезна, нет необходимости в i переменной в вашей области.

недостатки: не все браузеры имеют его еще, хотя большинство из них, и вы всегда можете использовать ES5 shim (поиск будет перечислять несколько), чтобы предоставьте его в браузерах, которые еще не имеют его. Если вы используете this в содержащем коде вы должны вставить его в переменную, чтобы вы могли использовать его в функции или передать его в качестве второго аргумента forEach, так как в функции итерации,this будет undefined (в строгом режиме) или глобальный объект (window) в нестрогом режиме, если вы не дадите forEach определенное значение для него.

jQuery.каждый:

jQuery.each(substr, function(index, item) {
    // do something with `item` (or `this` is also `item` if you like)
});

(ссылка на документы)

преимущества: все те же преимущества, что forEach, плюс вы знаете, что это там, так как вы используете jQuery.

недостатки если вы используете this в содержащем коде, вы должны вставить его в переменную, так что вы можете использовать его в функции, так как this означает что-то другое в функции.

вы можете избежать this вещь, хотя, либо через $.proxy:

jQuery.each(substr, $.proxy(function(index, item) {
    // do something with `item` (`this` is the same as it was outside)
}, this));

...или Function#bind:

jQuery.each(substr, function(index, item) {
    // do something with `item` (`this` is the same as it was outside)
}.bind(this));

...или в ES2015 ("ES6"), функция стрелки:

jQuery.each(substr, (index, item) => {
    // do something with `item` (`this` is the same as it was outside)
});

что не чтобы делать:

не использовать for..in для этого (или если вы это сделаете, сделайте это с надлежащими гарантиями). Вы увидите, как люди говорят (на самом деле, вкратце здесь был ответ, говорящий это), но for..in не делает то, что многие люди думают, что он делает (он делает что-то еще больше полезно!). В частности, for..in просматривает перечисли имена свойств объекта (не индексы массива). Так как массивы являются объектами, а их свойства только перечислимы по умолчанию являются индексами, это в основном похоже на работу в мягком развертывании. Но это не безопасное предположение, что вы можете просто использовать его для этого. Вот исследование:http://jsbin.com/exohi/3

я должен смягчить "не" выше. Если вы имеете дело с разреженные массивы (например, массив имеет всего 15 элементов, но их индексы по какой-то причине разбросаны по диапазону от 0 до 150 000, и поэтому length 150,001),и если вы используете соответствующие гарантии, такие как hasOwnProperty и проверка имени свойства действительно числовая (см. ссылку выше),for..in может быть вполне разумным способом избежать большого количества ненужных циклов, так как будут перечислены только заполненные индексы.

jQuery.каждый()

jQuery.каждый()

jQuery.each(array, callback)

итерации массива

jQuery.each(array, function(Integer index, Object value){});

объект итерации

jQuery.each(object, function(string propertyName, object propertyValue){});

пример:

var substr = [1, 2, 3, 4];
$.each(substr , function(index, val) { 
  console.log(index, val)
});

var myObj = { firstName: "skyfoot"};
$.each(myObj, function(propName, propVal) {
  console.log(propName, propVal);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

JavaScript петли для массива

для петля

for (initialExpression; condition; incrementExpression)
  statement

пример

var substr = [1, 2, 3, 4];

//loop from 0 index to max index
for(var i = 0; i < substr.length; i++) {
  console.log("loop", substr[i])
}

//reverse loop
for(var i = substr.length-1; i >= 0; i--) {
  console.log("reverse", substr[i])
}

//step loop
for(var i = 0; i < substr.length; i+=2) {
  console.log("step", substr[i])
}

на

//dont really wnt to use this on arrays, use it on objects
for(var i in substr) {
    console.log(substr[i]) //note i returns index
}

на

for(var i of subs) {
    //can use break;
    console.log(i); //note i returns value
}

forEach

substr.forEach(function(v, i, a){
    //cannot use break;
    console.log(v, i, a);
})

ресурсы

циклы MDN и итераторы

нет необходимости в jquery здесь просто for цикл работ:

var substr = currnt_image_list.split(',');
for(var i=0; i< substr.length; i++) {
  alert(substr[i]);
}

Вариант 1: традиционный for - loop

основы

традиционный for-петля состоит из трех компонентов :

  1. инициализации : выполняется до того, как блок look будет выполнен в первый раз
  2. состояние : проверяет условие каждый раз перед выполнением блока цикла и завершает цикл, если false
  3. спохватившись : выполняется каждый раз после выполнения блока цикла

эти три компонента отделены друг от друга с помощью ; символ. Содержание для каждого из этих трех компонентов является необязательным, что означает, что следующее является наиболее минимальным for-петли можно :

for (;;) {
    // Do stuff
}

конечно, вам нужно включить if(condition === true) { break; } или if(condition === true) { return; } внутри for-цикл, чтобы заставить его перестать работать.

обычно, хотя, инициализация используется для объявления индекса, условие используется для сравнения этого индекса с минимальным или максимальным значением, а запоздалая мысль используется для увеличения индекса:

for (var i = 0, length = 10; i < length; i++) {
    console.log(i);
}

используя tradtional for-цикл для цикла через массив

традиционный способ перебора массива, это:

for (var i = 0, length = myArray.length; i < length; i++) {
    console.log(myArray[i]);
}

или, если вы предпочитаете петлю назад, вы делаете это:

for (var i = myArray.length - 1; i > -1; i--) {
    console.log(myArray[i]);
}

есть, однако , многие варианты возможны, например. вот этот:

for (var key = 0, value = myArray[key], var length = myArray.length; key < length; value = myArray[++key]) {
    console.log(value);
}

... или вот этот ...

var i = 0, length = myArray.length;
for (; i < length;) {
    console.log(myArray[i]);
    i++;
}

... или вот этот:

var key = 0, value;
for (; value = myArray[key++];){ 
    console.log(value);
}

в зависимости от того, что работает лучше всего, в значительной степени зависит как от личного вкуса, так и от конкретного случая использования, который вы реализуете.

Примечание :

каждый из этих вариантов поддерживается всеми браузерами, включая старые версии véry!


Вариант 2 : while - loop

одна альтернатива for-loop - это while-петли. Чтобы выполнить цикл через массив, вы можете сделать следующее:

var key = 0;
while(value = myArray[key++]){
    console.log(value);
}
Примечание :

как традиционные for-петли, while-петли поддерживаются даже самыми старыми браузерами.

кроме того, каждый цикл while может быть переписан как for-петли. Например,while-loop hereabove ведет себя точно так же, как это for-петли :

for(var key = 0;value = myArray[key++];){
    console.log(value);
}

Вариант 3 : for...in и for...of

в JavaScript, вы также можете сделать это :

for (i in myArray) {
    console.log(myArray[i]);
}

это следует использовать с осторожностью, однако, поскольку он не ведет себя так же, как traditonal for-петли во всех случаях, и есть потенциальные побочные эффекты, которые необходимо учитывать. Смотрите почему используется "for...in" с итерацией массива плохая идея? дополнительные подробности.

как альтернатива for...in, там теперь тоже для for...of. В следующем примере показана разница между a for...of петли и for...in петли :

var myArray = [3, 5, 7];
myArray.foo = "hello";

for (var i in myArray) {
  console.log(i); // logs 0, 1, 2, "foo"
}

for (var i of myArray) {
  console.log(i); // logs 3, 5, 7
}
Примечание :

вы также должны учитывать, что ни одна версия Internet Explorer не поддерживает for...of (края 12+ делает) и что for...in требует, по крайней мере В IE10.


Вариант 4 : Array.prototype.forEach()

альтернатива For-петли Array.prototype.forEach(), который использует следующий синтаксис :

myArray.forEach(function(value, key, myArray) {
    console.log(value);
});
Примечание :

Array.prototype.forEach() поддерживается всеми современными браузерами, а также в IE9+.


Вариант 5 : jQuery.each()

в дополнение к четырем другим упомянутым параметрам, jQuery также имел свой собственный foreach вариация.

он использует следующий синтаксис :

$.each(myArray, function(key, value) {
    console.log(value);
});

использовать each() функция jQuery.

вот пример:

$.each(currnt_image_list.split(','), function(index, value) { 
  alert(index + ': ' + value); 
});

используйте Jquery каждый. Есть и другие способы, но каждый предназначен для этой цели.

$.each(substr, function(index, value) { 
  alert(value); 
});

и не ставьте запятую после последнего числа.

можно использовать for петли:

var things = currnt_image_list.split(','); 
for(var i = 0; i < things.length; i++) {
    //Do things with things[i]
}

Comments

    Ничего не найдено.