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, и поэтому
length150,001),и если вы используете соответствующие гарантии, такие какhasOwnPropertyи проверка имени свойства действительно числовая (см. ссылку выше),for..inможет быть вполне разумным способом избежать большого количества ненужных циклов, так как будут перечислены только заполненные индексы.
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); })ресурсы
нет необходимости в jquery здесь просто
forцикл работ:var substr = currnt_image_list.split(','); for(var i=0; i< substr.length; i++) { alert(substr[i]); }
Вариант 1: традиционный
for- loopосновы
традиционный
for-петля состоит из трех компонентов :
- инициализации : выполняется до того, как блок look будет выполнен в первый раз
- состояние : проверяет условие каждый раз перед выполнением блока цикла и завершает цикл, если false
- спохватившись : выполняется каждый раз после выполнения блока цикла
эти три компонента отделены друг от друга с помощью
;символ. Содержание для каждого из этих трех компонентов является необязательным, что означает, что следующее является наиболее минимальным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. В следующем примере показана разница между afor...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