我想在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))最快的方法是什么?
答案 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));