相关疑难解决方法(0)

在JavaScript中深度克隆对象的最有效方法是什么?

克隆JavaScript对象的最有效方法是什么?我已经看到obj = eval(uneval(o));被使用,但这是非标准的,只有Firefox支持.

我做过类似的事情,obj = JSON.parse(JSON.stringify(o));但质疑效率.

我也看到了具有各种缺陷的递归复制功能.
我很惊讶没有规范的解决方案.

javascript clone object

5181
推荐指数
48
解决办法
189万
查看次数

754
推荐指数
22
解决办法
55万
查看次数

为什么数组上的js映射会修改原始数组?

我对map()的行为很困惑.

我有一个这样的对象数组:

const products = [{
    ...,
    'productType' = 'premium',
    ...
}, ...]
Run Code Online (Sandbox Code Playgroud)

我将这个数组传递给一个函数,该函数应返回相同的数组,但所有产品都是免费的:

[{
    ...,
    'productType' = 'free',
    ...
}, ...]
Run Code Online (Sandbox Code Playgroud)

功能是:

const freeProduct = function(products){
    return products.map(x => x.productType = "free")
}
Run Code Online (Sandbox Code Playgroud)

返回以下数组:

["free", "free", ...]
Run Code Online (Sandbox Code Playgroud)

所以我重写了我的功能:

const freeProduct = function(products){
    return products.map(x => {x.productType = "free"; return x})
}
Run Code Online (Sandbox Code Playgroud)

它按预期返回数组.

但是!那是我放松心情的时刻,在这两种情况下我的原始产品阵列都被修改了.

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})
}
Run Code Online (Sandbox Code Playgroud)

但我仍然得到相同的结果(这开始让我发疯).

我会非常感谢任何可以解释我做错的人!

谢谢

javascript dictionary functor node.js

34
推荐指数
3
解决办法
3万
查看次数