Чтение онлайн

на главную - закладки

Жанры

JavaScript. Подробное руководство, 6-е издание
Шрифт:

[1,2,3].toString //Получается '1,2,3'

["а", "Ь", "с"]. toString // Получается а,Ь,с'

[1, [2, 'с']].toString //Получается '1,2,с'

Обратите внимание, что

toString
возвращает ту же строку, что и метод
join
при вызове его без аргументов.

Метод

toLocaleString
– это локализованная версия
toString.
Каждый элемент массива преобразуется в строку вызовом метода
toLocaleString
элемента, а затем полученные строки объединяются с использованием специфического для региона (и определяемого реализацией) разделителя.

7.9. Методы класса Array, определяемые стандартом ECMAScript 5

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

Однако, прежде чем перейти к изучению особенностей, следует сделать некоторые обобщения, касающиеся методов массивов в ECMAScript 5. Во-первых, большинство описываемых ниже методов принимают функцию в первом аргументе и вызывают ее для каждого элемента (или нескольких элементов) массива. В случае разреженных массивов указанная функция не будет вызываться для несуществующих элементов. В большинстве случаев указанной функции передаются три аргумента: значение элемента массива, индекс элемента и сам массив. Чаще всего вам необходим будет только первый аргумент, а второй и третий аргументы можно просто игнорировать. Большинство методов массивов, введенных стандартом ECMAScript 5, которые в первом аргументе принимают функцию, также принимают второй необязательный аргумент. Если он указан, функция будет вызываться, как если бы она была методом этого второго аргумента. То есть второй аргумент будет доступен функции, как значение ключевого слова

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

7.9.1. Метод forEach

Метод

forEach
выполняет обход элементов массива и для каждого из них вызывает указанную функцию. Как уже говорилось выше, функция передается методу
forEach
в первом аргументе. При вызове этой функции метод
forEach
будет передавать ей три аргумента: значение элемента массива, индекс элемента и сам массив. Если вас интересует только значение элемента, можно написать функцию с одним параметром - дополнительные аргументы будут игнорироваться:

var data = [1,2,3,4,5]; // Массив, элементы которого будут суммироваться

// Найти сумму элементов массива

var sum =0; // Начальное значение суммы 0

data.forEach(function(value) { sum += value; }); // Прибавить значение к sum

sum // => 15

// Увеличить все элементы массива на 1

data.forEach(function(v, і, а) { а[і] = v + 1; });

data // => [2,3,4,5,6]

Обратите внимание, что метод

fогEach
не позволяет прервать итерации, пока все элементы не будут переданы функции. То есть отсутствует эквивалент инструкции
break
, которую можно использовать с обычным циклом
for
. Если потребуется прервать итерации раньше, внутри функции можно возбуждать исключение, а вызов
forEach
помещать в блок
try
. Ниже демонстрируется функция
foreach
, вызывающая метод
forEach
внутри такого блока
try
. Если функция, которая передается функции
foreach
, возбудит исключение
foreach.break
, цикл будет прерван преждевременно:

function foreach(a,f,t) {

try {

a.forEach(f,t);

} catch(e) {

if (e === foreach.break)

return;

else throw e;

}

}

foreach.break = new Error("StopIteration");

7.9.2. Метод map

Метод

map
передает указанной функции каждый элемент массива, относительно которого он вызван, и возвращает массив значений, возвращаемых этой функцией. Например:

а = [1, 2, 3];

b = a.map(function(x) { return х*х; }); // b = [1, 4, 9]

Метод

map
вызывает функцию точно так же, как и метод
forEach
. Однако функция, передаваемая методу
map,
должна возвращать значение. Обратите внимание, что
map
возвращает новый массив: он не изменяет исходный массив. Если исходный массив является разреженным, возвращаемый массив также будет разреженным: он будет иметь ту же самую длину и те же самые отсутствующие элементы.

7.9.3. Метод filter

Метод

filter
возвращает массив, содержащий подмножество элементов исходного массива. Передаваемая ему функция должна быть функцией-предикатом, т.е. должна возвращать значение
true
или
false
. Метод
filter
вызывает функцию точно так же, как методы
forEach
и
map
. Если возвращается
true
или значение, которое может быть преобразовано в
true
, переданный функции элемент считается членом подмножества и добавляется в массив, возвращаемый методом. Например:

а = [5, 4, 3, 2, 1];

smallvalues = a.filter(function(x) { return х < 3 }); // [2, 1]

everyother = a.filter(function(x,і) { return і%2==0 }); // [5, 3, 1]

Обратите внимание, что метод

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

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

Я еще царь. Книга XXX

Дрейк Сириус
30. Дорогой барон!
Фантастика:
юмористическое фэнтези
аниме
попаданцы
5.00
рейтинг книги
Я еще царь. Книга XXX

Двойник Короля 7

Скабер Артемий
7. Двойник Короля
Фантастика:
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Двойник Короля 7

Французская новелла XX века. 1900–1939

Пруст Марсель
Проза:
классическая проза
6.25
рейтинг книги
Французская новелла XX века. 1900–1939

Петля, Кадетский Корпус. Книга четвертая

Алексеев Евгений Артемович
4. Петля
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Петля, Кадетский Корпус. Книга четвертая

Воронцов. Перезагрузка. Книга 5

Тарасов Ник
5. Воронцов. Перезагрузка
Фантастика:
попаданцы
альтернативная история
фэнтези
фантастика: прочее
6.00
рейтинг книги
Воронцов. Перезагрузка. Книга 5

Государь

Кулаков Алексей Иванович
3. Рюрикова кровь
Фантастика:
мистика
альтернативная история
историческое фэнтези
6.25
рейтинг книги
Государь

Я еще не барон

Дрейк Сириус
1. Дорогой барон!
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Я еще не барон

Старый, но крепкий 2

Крынов Макс
2. Культивация без насилия
Фантастика:
рпг
уся
эпическая фантастика
5.00
рейтинг книги
Старый, но крепкий 2

Проклятый Лекарь

Молотов Виктор
1. Анатомия Тьмы
Фантастика:
фэнтези
5.00
рейтинг книги
Проклятый Лекарь

Кодекс Императора IV

Сапфир Олег
4. Кодекс Императора
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Кодекс Императора IV

Очерки времен и событий из истории российских евреев. 1945 – 1970 гг. Книга 6

Кандель Феликс Соломонович
Научно-образовательная:
история
5.00
рейтинг книги
Очерки времен и событий из истории российских евреев. 1945 – 1970 гг. Книга 6

Меткий стрелок. Том II

Вязовский Алексей
2. Меткий стрелок
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Меткий стрелок. Том II

Газлайтер. Том 28

Володин Григорий Григорьевич
28. История Телепата
Фантастика:
боевая фантастика
аниме
попаданцы
5.00
рейтинг книги
Газлайтер. Том 28

Приключения русского дебютанта

Штейнгарт Гари
Проза:
современная проза
5.00
рейтинг книги
Приключения русского дебютанта