Я довольно смущен поведением map().
У меня есть массив таких объектов:
const products = [{
...,
'productType' = 'premium',
...
}, ...]
и я передаю этот массив функции, которая должна возвращать тот же массив, но со всем свободным продуктом:
[{
...,
'productType' = 'free',
...
}, ...]
Функция:
const freeProduct = function(products){
return products.map(x => x.productType = "free")
}
Что возвращает следующий массив:
["free", "free", ...]
Итак, я переписал свою функцию:
const freeProduct = function(products){
return products.map(x => {x.productType = "free"; return x})
}
Возвращает массив по назначению.
НО! И тот момент, когда я теряю сознание, в обоих случаях изменен мой исходный массив продуктов.
Документация вокруг map() говорит, что она не должна (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map).
Я даже попытался создать клон моего массива, который превратил мою функцию следующим образом
const freeProduct = function(products){
p = products.splice()
return p.map(x => {x.productType = "free"; return x})
}
Но я все равно получаю тот же результат (который начинает сводить меня с ума).
Я был бы очень благодарен всем, кто может объяснить мне, что я делаю неправильно!
Спасибо