Меню
✘Скрыть меню
Меню заработка
✘Скрыть меню
Загрузка.. nostroma.online from NOSTROMA - best life and beautiful workЭто ужасно тяжелая работа — ничего не делать – Оскар УайльдРешающую роль в работе играет не всегда материал, но всегда мастер – Максим ГорькийЯ слишком энергичен, чтобы работать – Марсель АшарЧто привлекло меня в карьере писателя? Отсутствие бумажной работы.Одни люди работают только для того чтобы работать, другие – для того, чтобы иметь возможность не работать в будущем.Занятие ерундой на рабочем месте развивает боковое зрение, слух и бдительность в целомСтоит статýя в лучах заката с огромным буем, в руках - граната.Друзья, если вы попались на лохотрон, не будьте эгоистами - предупредите других о таком сайте!Секрет гения — это работа, настойчивость и здравый смысл. Томас Эдисон
Меню заработка

Курсы JavaScript

Урок 12. Цикличность в JavaScript


Преобразование массивоподобного объекта в массив

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

Начнём по порядку. Для начала создадим массивоподобный объект, назовём его vasca:

var vasca = {'0':'Василий', '1':'Александрович', '2':'Иванов', length:3};

В этом примере мы перечислили в фигурных скобках пары 'свойство':'значение' через запятую и указали свойство length, которое автоматически не связано с прочими членами массивоподобного объекта.

Далее можно превратить этот массивоподобный объект vasca в настоящий массив. Для этого нам понадобится метод slice.

slice - возвращает массив или его часть.

Синтаксис метода: arrObject.slice(start, end); где -

arrObject - исходный массив
start - Индекс элемента в исходном массиве, с которого будет начато конструирование нового массива - необязательный параметр
end - Индекс элемента в исходном массиве, на котором конструирование нового массива будет завершено - необязательный параметр

Преобразуем теперь массивоподобный объект vasca в настоящий массив:

var vasca = {'0':'Василий', '1':'Александрович', '2':'Иванов', length:3};
var vascaArr = [].slice.call(vasca);
console.log(vascaArr);

/* Выведет:
(3) ["Василий", "Александрович", "Иванов"]
0: "Василий"
1: "Александрович"
2: "Иванов"
length: 3
__proto__: Array(0)*/

Метод call применяется для вызова функции в контексте нужного объекта.

Цикличность

Цикличность в JavaScript может возникать как явно, при использовании циклов, рекурсии, таймеров, так и неявно при использовании методов, вызывающих функцию для каждого значения массива. Такими методами, например, являются forEach и reduce, а также метод map.

forEach

forEach относится к перебирающим массив методам. Он осуществляет "умный" перебор массива путём вызова функции для каждого элемента массива. Этой функции forEach передаёт три параметра:

Синтаксис метода: arr.forEach(function(item, i, arr){...}); где -

arr - исходный массив, который будет перебираться методом forEach
item - очередной элемент массива
i - номер очередного элемента массива
arr - массив, который перебирается
... - тело функции, которая вызывается для каждого элемента исходного массива

Рассмотрим простой пример перебора массива методом forEach. В теле функции укажем обычный вывод в консоль при каждой итерации:

/*Создаём массив из 5 элементов*/
var myArr = ["Саша", "Марина", "Денис", "Оля", "Витя"];

/*Перебираем массив myArr методом forEach*/
myArr.forEach(function(item, i, myArr){
	
	/*В теле функции указываем вывод в консоль значений
	i, item, myArr при каждой итерации*/
	console.log(i + ":" + item + "(массив:" + myArr + ")");
});

/* Выведет:
0:Саша(массив:Саша,Марина,Денис,Оля,Витя)
1:Марина(массив:Саша,Марина,Денис,Оля,Витя)
2:Денис(массив:Саша,Марина,Денис,Оля,Витя)
3:Оля(массив:Саша,Марина,Денис,Оля,Витя)
4:Витя(массив:Саша,Марина,Денис,Оля,Витя)*/

reduce

Метод reduce - довольно сложный, однако он часто позволяет решать задачи в несколько строк, которые в противном случае потребовали бы много трёхэтажного кода и времени на их решение.

reduce обрабатывает каждый элемент массива с сохранением промежуточного результата.

Синтаксис метода:
arr.reduce(function(prevValue, currentItem, index, arr){...}, initialValue); где -

arr - исходный массив, обрабатываемый методом reduce
prevValue - последний (он же промежуточный) результат вызова функции
currentItem - текущий элемент массива, перебор идёт слева направо
index - номер текущего элемента
arr - исходный массив
initialValue - необязательный параметр - если он есть, то при первом вызове функции значение prevValue будет равно initialValue, иначе - первому элементу массива, а перебор начнётся со второго

Рассмотрим пример, в котором требуется получить сумму всех элементов массива:

/*Создаём массив из 5 числовых элементов*/
var myArr = [8, 5, 3, 7, 12];

/*Получаем сумму элементов массива myArr методом reduce*/
var result = myArr.reduce(function(prevValue, currentItem){
	
	/*В теле функции указываем возврат значения*/
	return prevValue + currentItem;
}, 0);

/*Выводим результат методом alert*/
alert(result);

map

Метод map - применяется для трансформации массива. При его работе создаётся новый массив, соостоящий из результатов вызова функции для каждого элемента исходного массива..

Синтаксис метода: var newArr = arr.map(function(item, i, arr){...}); где -

newArr - переменная, в которую будет получен новый массив
arr - исходный массив
item, i, arr - элемент, его номер, исходный массив
... - тело функции

/*Создаём исходный массив*/
var myArr = ["Марина", "Витя", "Саша"];

/*Трансформируем исходный массив myArr в новый массив newArr*/
var newArr = myArr.map(function(item){
	
	/*В теле функции укажем возврат значения длины для каждого
	элемента*/
	return item.length;
});

/*Выводим результат в консоль*/
console.log(newArr);

/*Выведет массив [6, 4, 4]*/

Комментарии

Введите Ваше имя:*

Введите e-mail:

Ваш комментарий:*

* Обязательные поля