Как перебрать массив с помощью JavaScript?

У меня есть строка, у которой есть данные, разделенные символом канала (|).

Пример

var somestring = "data1|data2|data3";
var separated = somestring.split("|");

Я знаю, как использовать split() для разделения каждой информации.

Однако, я не знаю, сколько труб будет в результате Array.

В jQuery или JavaScript, как мне перебрать цикл по возвращаемому массиву?

Ответы

Ответ 1

В jQuery или JavaScript, как мне пройти через каждую выделенную переменную?

Вам просто нужно перебирать результирующий Array.

JQuery

$.each loop

Этот метод прост в использовании и преимущества в используемых инкапсулируемых переменных.

$.each(separated, function(index, chunk) {
    // `chunk` is each member of the array.
});

jsFiddle.

Конечно, jQuery - это JavaScript, поэтому любой из нижеперечисленных методов также будет работать.

JavaScript

for loop

Это рекомендуемый способ.

for (var i = 0, length = separated.length; i < length; i++) {
    var chunk = separated[i];
    // `chunk` is each member of the array.
}

jsFiddle.

Вы также заметите, что свойство length кэшируется, поэтому на каждой итерации он не просматривается. Некоторые браузеры уже оптимизированы для этого, однако IE по-прежнему пользуется преимуществами кэширования. Это займет всего 5 секунд, поэтому вы можете также поддерживать пользователей IE.

Вы можете определить i и chunk вне цикла for, потому что JavaScript не имеет области блока (если вы не используете let), и эти переменные будут существовать до (объявление поднято) и после (без масштаба блока).

for ( in ) loop

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

for (var chunk in separated) {
     if ( ! separated.hasOwnProperty(chunk)) {
         continue;
     }
     // `separated[chunk]` is each member of the array.   
}

jsFiddle.

Этот цикл будет перебирать все свойства цепи прототипа, поэтому hasOwnProperty() должен использоваться. По этой причине он не рекомендуется для массивов.

for ( of ) loop

Этот цикл стандартизован в ECMA 6 и способен циклически перебирать NodeList и итераторы.

for (var chunk of separated) {
     // `chunk` is each member of the array.   
}

jsFiddle

forEach() метод

Этот метод является дополнением к стандарту ECMA-262. Он недоступен в IE8, но может быть shimmed относительно легко.

separated.forEach(function(chunk, index) {
     // `chunk` is each member of the array.   
});

jsFiddle.

Другие специализированные методы

Если вы ищете итерацию для определенной цели, может оказаться полезным использовать специализированный итератор. Имейте в виду, что они также не имеют лучшей поддержки браузера.

filter метод

Создает mew-массив элементов, для которых связанный обратный вызов был правным.

separated.filter(function(element) {
    return +element > 255;
});

reduce метод

Создает новое значение, основанное на уменьшении элементов массива слева направо.

separated.reduce(function(accumulator, element) {
    return accumulator.concat(element);
}, "");

См. также метод reduceRight.

map метод

Создает новый массив, заменяя каждый элемент возвращаемым значением связанного обратного вызова.

separated.map(function(element) {
    return element.substr(0, 1);
});

every метод

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

separated.every(function(element) {
    return element.substr(0, 1) == "a";
});

some метод

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

separated.some(function(element) {
    return element.substr(0, 1) == "a";
});

Ответ 2

separated.length должно быть всем, что вам нужно.

Ответ 3

str.split() возвращает массив значений, поэтому в вашем примере, поскольку "разделенный" - это массив, вы можете:

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

Ответ 4

Если вы хотите знать длину результирующего массива, что насчет separated.length?

базовый цикл через массивы:

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

для максимальной скорости (особенно в IE, см. комментарии) кешируют длину массива:

var i = 0,                  //now you can omit var i=0 in the loop
    len = separated.length; //arrays length is cached

for (; i<len; i++){
  // do something with separated[i]
}

Ответ 5

вы можете сделать это в jquery, подобном этому

$.each(separated,function(key,item){ alert('here is ' + item + ' at position ' + key) })

Ответ 6

Если ваш вопрос на самом деле является "как мне пройти через каждую разделенную переменную?" то:

for (var i = 0; i < separated.length; i++)
{
 //Do something with separated[i];
}

//or  (apparently this is deprecated)

for(var a in separated)
{
  //Do something with a
}

Ответ 7

Прокрутите контур FOR... NEXT, как на большинстве других языков:

var somestring = "data1|data2|data3";
var separated = somestring.split("|");

for (i=0 ; i<separated.length; i++) {
 document.write(separated[i]);
 document.write("<br/>");
}