【发布时间】:2016-06-25 15:33:16
【问题描述】:
我对 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})
}
但我仍然得到相同的结果(这开始让我发疯)。
我会非常感谢任何能解释我做错了什么的人!
谢谢。
【问题讨论】:
标签: javascript node.js dictionary functor