Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 05.05.2021, 18:25
Аватар для slark
Новичок на форуме
Отправить личное сообщение для slark Посмотреть профиль Найти все сообщения от slark
 
Регистрация: 05.05.2021
Сообщений: 8

Почему метод map() изменяет исходный массив
Добрый день в документации написано что метод массива map() не изменяет исходный массив, проверял всё верно.

Однако если применть метод map(), к массиву объектов, то исходный массив изменяется, пример:

const names = [
    { name: 'Ivan ',  age: 33 },
    { name: ' Petr',  age: 45 },
    { name: '   Sidor', age: 27 }
]

const namesTrim = names.map( item => {
    item.name = item.name.trim()
    return item
})

console.log(names)     // пробелы исчезли тоже
console.log(namesTrim)


В исходном массиве names пробелы тоже пропали.
Почему так происходит?

Последний раз редактировалось slark, 05.05.2021 в 18:28.
Ответить с цитированием
  #2 (permalink)  
Старый 05.05.2021, 18:32
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,103

Сообщение от slark
Почему так происходит?
читать https://learn.javascript.ru/object-copy
Ответить с цитированием
  #3 (permalink)  
Старый 05.05.2021, 18:39
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,103

slark,
на всякий случай, если нет "объектов в объекте"
const names = [
    { name: 'Ivan ',  age: 33 },
    { name: ' Petr',  age: 45 },
    { name: '   Sidor', age: 27 }
]

const namesTrim = names.map( item => {
    let name = item.name.trim()
    return {...item, name}
})

console.log(names)
console.log(namesTrim)
Ответить с цитированием
  #4 (permalink)  
Старый 05.05.2021, 19:37
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,202

Сообщение от slark
В исходном массиве names пробелы тоже пропали.
Не в массиве, а в свойствах объектов...
map возвращает новый массив, но ссылки на объекты в тех массивах одинаковые.
Ответить с цитированием
  #5 (permalink)  
Старый 15.05.2021, 09:27
Аватар для slark
Новичок на форуме
Отправить личное сообщение для slark Посмотреть профиль Найти все сообщения от slark
 
Регистрация: 05.05.2021
Сообщений: 8

ясно спасибо
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Почему метод .html() не работает так как .innerHTML()? drakulawz Events/DOM/Window 45 07.09.2018 14:16
Метод по добавлению элементов в массив - JavaScript Алекс776 Общие вопросы Javascript 2 02.10.2017 00:32
Почему в хроме может не работать метод MKCOL? asci AJAX и COMET 0 14.02.2013 22:45
Метод submit() не передает массив $_POST ZaValera Общие вопросы Javascript 15 21.06.2012 16:02
Почему результат Ajax запроса - Исходный код страницы pro_xaoc AJAX и COMET 4 23.11.2011 10:03