JavaScript 中复制对象的不同技巧


在 JavaScript 中,对象是键值对的集合。对象的属性是键,并用字符串表示。键的值是给定对象属性的值。

对象复制的类型/技巧

在任何语言中,复制对象有两种类型:深拷贝和浅拷贝。

浅拷贝

在这种技术中,对象尽可能少地被复制。例如,如果您使用此技术复制集合,则集合的结构将被复制到目标,而不是元素。

示例

以下是浅拷贝的示例:

let innerObj = { a: 'b', c: 'd' } let obj = { x: "test", y: innerObj } // Create a shallow copy. let copyObj = Object.assign({}, obj); // Both copyObj and obj's prop y now refers to the same innerObj. Any changes to this will be reflected. innerObj.a = "test" console.log(obj) console.log(copyObj)

请注意,浅拷贝不会递归地创建克隆。它只在顶层执行。

深拷贝

在深拷贝中,对象被完全复制。集合的深拷贝是两个集合,其中包含原始集合中所有克隆的元素。

示例

以下是深拷贝的示例:

let innerObj = { a: 'b', c: 'd' } let obj = { x: "test", y: innerObj } // Create a deep copy. let copyObj = JSON.parse(JSON.stringify(obj)) // Both copyObj and obj's prop y now refers to the same innerObj. Any changes to this will be reflected. innerObj.a = "test" console.log(obj) console.log(copyObj)

其他复制对象的方法

在 JavaScript 中,对象可以通过多种方式复制到另一个对象,其中一些将在下面讨论。

使用扩展运算符(…)

JavaScript 中的扩展运算符用于将原始给定对象的值复制到新对象。此运算符由三个点(…)表示。

示例

此示例演示了如何在 JavaScript 中使用扩展运算符复制对象:

var employee = { emp_name: "Abdul Rawoof", company: "Tutorials Point", salary: 18000, job: "Software Engineer-Intern" } console.log("The original object employee is:", employee) var cpyEmployee = {...employee} console.log("The copied object cpyEmployee is:",cpyEmployee);

如果对象具有嵌套对象,则在使用扩展运算符时应编写一些额外的代码。

使用 assign() 函数

此函数用于将原始对象复制到新对象。它与扩展运算符的区别在于,当存在嵌套对象时,如果使用 assign() 复制对象,则嵌套对象不会更改,而对象的其它变量可以更改。

assign() 函数有两个参数。第一个参数是花括号 {},用于确保新对象不会更改原始对象。第二个参数是要复制到新对象中的原始对象的名称。

语法

以下是 assign() 函数的语法。

Object.assign({},originalObjectName)

示例

此示例演示了如何使用 assign() 将对象复制到新对象:

var employee = { emp_name: "Abdul Rawoof", company: "Tutorials Point", salary: 18000, job: "Software Engineer-Intern" } console.log("The original object employee is:", employee) var cpyEmployee = Object.assign({},employee) console.log("The copied object cpyEmployee is:",cpyEmployee); cpyEmployee.emp_name="Jason" cpyEmployee.job="Content writer-Intern" console.log("The copied object with some different name and role is:",cpyEmployee)

在上面的示例中,原始对象被复制到新对象,然后对象的属性被更改。因此,由此可以得出结论,我们可以在从原始对象复制对象后更新对象属性的值。

当这些对象使用 assign() 函数复制时,原始值和新复制的值将具有相同的引用。因此,一个值的变化会相应地改变另一个值。

使用 JSON

这用于以快速简便的方式将原始对象复制到新对象。当给定的输入是数字、字符串和对象文字时,可以使用此函数进行复制。

这样,必须使用两种方法来复制对象,它们是 parse() 和 stringify() 函数。Parse() 函数将字符串解析为 JavaScript 对象。通过这样做,这两个对象将拥有各自的内存。

语法

下面给出了 json() 方法的语法。

JSON.parse(JSON.stringify(originalObjectName))

示例

此示例演示了如何使用 parse() 和 stringify() 复制对象:

let employee = { emp_name: 'Abdul Rawoof', company: 'Tutorials Point', emp_id: 'TP10000', role: 'Software Engineer-Intern', salary: 18000 } let cpyEmployee = JSON.parse(JSON.stringify(employee)) console.log("This is the original object:",employee) console.log("This is the new copied object:",cpyEmployee) cpyEmployee.emp_name = 'B Jason' cpyEmployee.emp_id = 'TP9999' cpyEmployee.role = 'Content Writing-Intern' console.log("The copied object with updations is:",cpyEmployee)

更新于: 2022-09-02

276 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告