Вход/Регистрация
JavaScript. Подробное руководство, 6-е издание
вернуться

Флэнаган Дэвид

Шрифт:

// тело цикла

}

Наконец, если необходимо пропустить только несуществующие элементы, а элементы со значением undefined обрабатывать как обычные элементы, проверку можно записать так:

for(var і = 0; і < a.length; i++) {

if (!(i in a)) continue ; // Пропустить несуществующие элементы

// тело цикла

}

Для обхода разреженных массивов можно также использовать цикл

for/in
(раздел 5.5.4). Этот цикл присваивает имена перечислимых свойств (включая индексы массива) переменной цикла. Отсутствующие индексы в итерациях не участвуют:

for(var index in sparseArray) {

var value = sparseArray[index];

// Далее следуют операции с индексами и значениями

}

Как отмечалось в разделе 6.5, цикл

for/in
может возвращать имена унаследованных свойств, такие как имена методов, добавленных в
Array.prototype
. По этой причине не следует использовать цикл
for/in
для обхода массивов, не предусмотрев дополнительной проверки для фильтрации нежелательных свойств. Для этого можно было бы использовать, например, такие проверки:

for(var і in а) {

if (!a.hasOwnProperty(i)) continue; // Пропустить унаследованные свойства

// тело цикла

}

for(var і in а) {

// Пропустить і, если оно не является целым неотрицательным числом

if (String(Math.floor(Math.abs(Number(i)))) !== і) continue;

}

Спецификация ECM AScript допускает возможность обхода свойств объекта в цикле

for/in
в любом порядке. Обычно реализации обеспечивают обход индексов массивов в порядке возрастания, но это не гарантируется. В частности, если массив имеет и свойства объекта, и элементы массива, имена свойств могут возвращаться в порядке их создания, а не в порядке возрастания числовых значений. Разные реализации по-разному обрабатывают эту ситуацию, поэтому, если для вашего алгоритма порядок выполнения итераций имеет значение, вместо цикла
for/in
лучше использовать обычный цикл
for
.

Стандарт ECMAScript 5 определяет множество новых методов, позволяющих выполнять итерации по элементам массивов в порядке возрастания индексов и передавать их функции, определяемой пользователем. Наиболее типичным представителем этих методов является метод

forEach
:

var data = [1,2,3,4,5]; // Этот массив требуется обойти

var sumOfSquares =0; // Требуется вычислить сумму квадратов элементов

data.forEach(function(x){ // Передать каждый элемент этой функции

sumOfSquares += х*х; // прибавить квадрат к сумме

});

sumOfSquares // =>55 : 1+4+9+16+25

forEach
и другие родственные методы, предназначенные для выполнения итераций, позволяют использовать при работе с массивами простой и мощный стиль функционального программирования. Они описываются в разделе 7.9, и еще раз мы вернемся к ним в разделе 8.8, когда будем рассматривать приемы функционального программирования.

7.7. Многомерные массивы

JavaScript не поддерживает «настоящие» многомерные массивы, но позволяет неплохо имитировать их при помощи массивов из массивов. Для доступа к элементу данных в массиве массивов достаточно дважды использовать оператор

[]
. Например, предположим, что переменная
matrix
– это массив массивов чисел. Каждый элемент
matrix[x]
– это массив чисел. Для доступа к определенному числу в массиве можно использовать выражение
matrix[x][y]
. Ниже приводится конкретный пример, где двумерный массив используется в качестве таблицы умножения:

  • Читать дальше
  • 1
  • ...
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: