Обновление
Чтобы ответить на ваш комментарий, .map()
не подходит для добавления значений в ваш массив. Вы должны использовать его, когда вам нужно изменить каждый элемент входного массива, например, удвоив каждое значение:
var input = [1,2,3,4,5];
var myArr = input.map(function (x) {
return x * 2;
});
myArr.push(6,7); // Append your values in a separate statement.
console.log(myArr); // [2,4,6,8,10,6,7]
Затем вы добавляете новые значения на отдельном шаге до или после карты, в зависимости от что вы хотите достичь.
Объяснение
Ваш код ведет себя не так, как вы ожидаете. console.log(myArr)
похоже, что он печатает исходный массив, но на самом деле это не так. Например, если вы удалите весь другой код, у вас останется это:
var myArr = [1,2,3,4,5].map(function (x) {
return x;
});
console.log(myArr); // [1,2,3,4,5]
Вы можете видеть, что мы просто возвращаем x
без внесения каких-либо изменений. x
разрешится до 1
, затем 2
и т.д. c по очереди. Выходные данные .map()
будут поэтому [1,2,3,4,5]
, который содержит идентичные значения для вашего входного массива, но не является точно таким же массивом, это копия.
Вы можете доказать это, переместив ваш входной массив в новый переменная и затем сравнение myArr === input
в конце:
var input = [1,2,3,4,5];
var myArr = input.map(function (x) {
return x;
});
console.log(input); // [1,2,3,4,5]
console.log(myArr); // [1,2,3,4,5]
console.log(myArr === input); // false
Чтобы сделать этот шаг еще дальше, если мы возьмем 3-й параметр .map()
и заменим каждый элемент на двойное его значение, мы увидим что исходный input
массив действительно изменяется, а возвращаемое значение из .map()
, myArr
остается прежним.
var input = [1,2,3,4,5];
var myArr = input.map(function (x, i, arr) {
arr[i] = x * 2;
return x;
});
console.log(input); // [2,4,6,8,10]
console.log(myArr); // [1,2,3,4,5]
console.log(myArr === input); // false
Бонусные баллы
То, что вы можете изменить исходный массив с помощью 3-го параметра .map()
, не означает, что вы должны это сделать. Это может привести к непредвиденному поведению и затруднить будущим разработчикам рассуждать о том, что делает код.
Гораздо лучше, чтобы ваши функции возвращали новую переменную, а не изменяли входные параметры.