JavaScript Array # map: индексный аргумент
Мой вопрос о методе map
массивов в JavaScript.
Вы можете передать ему функцию, которая принимает второй аргумент, индекс текущего элемента обрабатываемого массива, но... с какой целью? Что происходит, когда вы это делаете и какая разница, когда вы этого не делаете?
Что бы вы использовали эту функцию для?
Ответы
Ответ 1
Индекс текущего элемента всегда передается функции обратного вызова, единственная разница, если вы не объявляете ее в функции, заключается в том, что вы не можете получить к ней доступ по имени.
Пример:
[1,2,3].map(function(o, i){
console.log(i);
return 0;
});
[1,2,3].map(function(o){
console.log(arguments[1]); // it still there
return 0;
});
Вывод:
0
1
2
0
1
2
Демо: http://jsfiddle.net/Guffa/k4x5vfzj/
Ответ 2
Иногда имеет значение индекс элемента. Например, эта карта заменяет каждый второй элемент 0:
var a = [1, 2, 3, 4, 5, 6];
var b = a.map(function(el, index) {
return index % 2 ? 0 : el;
});
console.log(b);
Вывод:
[1, 0, 3, 0, 5, 0]
Ответ 3
Ниже приведено описание функции map
:
arr.map(callback[, thisArg])
callback
Функция, которая создает элемент нового массива, используя три аргумента:
currentValue
Текущий элемент обрабатывается в массиве.
index
Индекс текущего элемента обрабатывается в массиве.
array
Карта массива была вызвана.
Функция карты принимает функцию обратного вызова в качестве аргумента (а не как индекс как аргумент, как первоначально указывалось в вопросе до его редактирования). Функция обратного вызова имеет индекс как параметр - обратный вызов вызывается автоматически, поэтому вы не предоставляете индекс самостоятельно. Если вам нужно только текущее значение, вы можете опустить другие параметры.