JavaScript. Подробное руководство, 6-е издание
Шрифт:
}
Как отмечалось в разделе 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]
. Ниже приводится конкретный пример, где двумерный массив используется в качестве таблицы умножения:
// Создать многомерный массив
var table = new Array(10); // В таблице 10 строк
for(var і = 0; і < table.length; i++)
table[i] = new Array(10); // В каждой строке 10 столбцов
// Инициализировать массив
for(var row = 0; row < table.length; row++) {
for(col = 0; col < table[row].length; col++) {
table[row][col] = row*col;
}
}
// Расчет произведения 5*7 с помощью многомерного массива
var product = table[5][7]; // 35
7.8. Методы класса Array
Стандарт ECMAScript 3 определяет в составе
Array.prototype
множество удобных функций для работы с массивами, которые доступны как методы любого массива. Эти методы будут представлены в следующих подразделах. Более полную информацию можно найти в разделе Array
в справочной части по базовому языку JavaScript. Стандарт ECMAScript 5 определяет дополнительные методы для выполнения итераций по массивам - эти методы рассматриваются в разделе 7.9. 7.8.1. Метод join
Метод
Array.join
преобразует все элементы массива в строки, объединяет их и возвращает получившуюся строку. В необязательном аргументе методу можно передать строку, которая будет использоваться для отделения элементов в строке результата. Если строка-разделитель не указана, используется запятая. Например, следующий фрагмент дает в результате строку «1,2,3»:
var а = [1, 2, 3]; // Создать новый массив с указанными тремя элементами
Поделиться:
Популярные книги
Студиозус 2
4. Светлая Тьма
Фантастика:
юмористическое фэнтези
городское фэнтези
аниме
5.00
рейтинг книги
Дважды одаренный. Том VI
6. Дважды одаренный
Фантастика:
аниме
альтернативная история
фэнтези
фантастика: прочее
5.00
рейтинг книги
Чужбина
2. Дворянская кровь
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Гримуар темного лорда III
3. Гримуар темного лорда
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Изгой Проклятого Клана
1. Изгой
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Разведчик. Заброшенный в 43-й
Героическая фантастика
Фантастика:
боевая фантастика
попаданцы
альтернативная история
5.93
рейтинг книги
Личный аптекарь императора. Том 3
3. Личный аптекарь императора
Фантастика:
городское фэнтези
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Последний Герой. Том 4
Последний герой
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Неудержимый. Книга XXVII
27. Неудержимый
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Купеческая дочь замуж не желает
Фантастика:
фэнтези
6.89
рейтинг книги
#Бояръ-Аниме. Газлайтер. Том 13
13. История Телепата
Фантастика:
боевая фантастика
аниме
попаданцы
фэнтези
5.00
рейтинг книги
Новик
2. Помещик
Фантастика:
альтернативная история
6.67
рейтинг книги
Неудержимый. Книга XIX
19. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Отморозок 2
2. Отморозок
Фантастика:
попаданцы
5.00