深度复制对象的最有效方式javascript

时间:2018-11-10 03:38:09

标签: javascript json redux deep-copy

我想在javascript中深度复制一些对象,以便我的reducer在redux中是纯净的。有些属性具有1级嵌套,有些具有2级,有些具有3级,例如:

var x = {a:9}, y:{a:{b:9}}, z = {a:{b:{c:9}}};

所以我应该使用其他一些技术,例如:

var newX = {...x}, newY = {a:{...y.a}}

我是否应该继续在循环中使用相同的技术-也为三层嵌套编写自定义深层副本,还是应该简单地使用:

var newZ = JSON.parse(JSON.stringify(z));

创建我的深层副本。

替代JSON.parse(JSON.stringify(value))最快的方法是什么?

2 个答案:

答案 0 :(得分:0)

如果您真的想要深度克隆,就我所知,到目前为止,性能最高的方法是您已经提到的JSON parse / stringify技巧。

否则,您将不得不使用某种递归克隆策略。例如,Lodash has a deepClone function

作为深度克隆的替代方法,我强烈推荐immer,它利用了称为结构共享的概念,其中不会克隆对象的未更改部分。这样性能更高,占用的内存更少。

答案 1 :(得分:0)

我使用在StackOverflow上找到的此功能:

struct packet {
    uint16_t mfg;
    uint8_t type;
    uint16_t devid;
} __attribute__((packed));