javascript - 如何在 JavaScript 中复制一个对象?

标签 javascript

<分区>

我正在创建一个脚本,其中我创建了一个对象,我想复制它,但是当我将对象分配给另一个变量时,如果我更改它会同时更改这两个变量。

我一直在读一本书,我的理解是它是一个引用而不是一个值,但我想复制一个对象并从那时起分别对待它们。这是我所做的一个例子:

var myObject = {};
var copyOfMyObject = myObject;
myObject.foo = 'bar';

console.log(myObject, copyOfMyObject);

//logs Object {foo="bar"} Object {foo="bar"}

有没有办法复制整个对象,我可以在不影响其他对象的情况下独立更改它们的属性?

最佳答案

您必须将每个属性映射到新数组:

可以像这样制作简单的一级克隆:

function clone(a, b) {
    var prop;
    for( prop in b ) {
        b[prop] = a;
    }
}

这会将所有属性从 b 克隆到 a。但将所有其他属性保留在 a 中:

var a = {a: 9, c: 1},
    b = {a: 1, b: 1};

copy(a, b); // {a: 1, b: 1, c: 1}

深度克隆对象:

上面的例子在处理单层对象时有效,但是当存在多层次时会造成混淆,看看这个例子:

var a = {},
    b = { a: { a: 1 } }

clone(a, b);

a.a.a = 2; 
console.log(a); // { a: { a: 2 } }
console.log(b); // { a: { a: 2 } }

上面的例子证明了a.a里面的对象和b.a里面的对象是一样的。

关于javascript - 如何在 JavaScript 中复制一个对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16885849/

相关文章:

javascript - 在其他地方显示答案

javascript - 我为我的网站添加了一个 Lightbox jquery,但我想删除每次出现的蓝色边框

javascript - 为什么在作为属性访问时原型(prototype)构造函数中的变量未定义?

javascript - Require 不适用于 node-opcua

javascript - 如何解决 Flow 中的 "inexact function"错误?

javascript - 从表中的动态下拉列表中获取选定的值

javascript - Jquery 的 ie7 问题,也可能是 html

javascript - 具有自己查询的 Gatsby 可重用组件

javascript - 有没有可能在客户端使用 ruby ?

javascript - 如何对数据进行分组?