dpablo_escobarr
@dpablo_escobarr

Как объяснить такое поведение функции map?

мало опыта в js. И вопрос скорее всего глупый, но все же не нашел информации по этому поводу
let cord = [{x: 0, y: 0, type: 5, active: true}]
console.log(cord)
//x=5
cord.map(elem => elem.x = 5)

console.log(cord)
//x=5

на сколько я знаю, map выдает новый массив, переменную которой нужно приравнивать
  • Вопрос задан
  • 96 просмотров
Решения вопроса 3
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
В данном случае, анонимная функция в map меняет свойство x непосредственно в объекте - элементе массива, который передаётся в неё по ссылке.
Результат у функции map тоже есть, он равен [5].
Ответ написан
Комментировать
yarkov
@yarkov Куратор тега JavaScript
Помог ответ? Отметь решением.
const cord = [{x: 0, y: 0, type: 5, active: true}]
console.log(cord) // x = 0
const newCoord = cord.map(elem => ({
	...elem,
	x: 5
}))
console.log(cord) // x = 0
console.log(newCoord) // x = 5
Ответ написан
Комментировать
Kozack
@Kozack Куратор тега JavaScript
Thinking about a11y
В вашем случае происходит примерно следующее:
function incrementX(obj) {
  obj.x += 1
  return obj
}

var a = {x: 0}
var b = incrementX(a)

console.log(b) // {x: 1}
console.log(a) // {x: 1} -- Магия


Объекты в JS передаются по ссылке. То есть передавая объект как аргумент в функцию последняя может его модифицировать что может привести к нежелательным эффектам.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы