📜  洛达什 | _.clone() 方法

📅  最后修改于: 2022-05-13 01:56:35.780000             🧑  作者: Mango

洛达什 | _.clone() 方法

_.clone() 方法用于创建值的浅表副本。此方法支持克隆数组、数组缓冲区、布尔值、日期对象、地图、数字、对象对象、正则表达式、集合、字符串、符号和类型化数组。它松散地基于结构化克隆算法。

句法:

_.clone( value )

参数:此方法接受上面提到的单个参数,如下所述:

  • value:该参数保存需要克隆的值。

返回值:此方法返回值的浅表副本。

示例 1:克隆简单对象

javascript
const _ = require('lodash');
  
var obj = {
    x: 23
};
  
// Shallow copy
var shallowCopy = _.clone(obj);
  
console.log('Comparing original with'
    + ' shallow ', obj === shallowCopy);
  
obj.x = 10; // Changing original value
  
console.log('After changing original value');
  
console.log("Original value ", obj);
  
console.log("Shallow Copy value ", shallowCopy);


javascript
const _ = require('lodash');
   
var obj = [{  x: 1 }, {y: 2}];
  
// Shallow copy
var shallowCopy = _.clone(obj);
   
console.log('Comparing original with shallow ',
            obj[0] === shallowCopy[0]);
   
// Changing original value
obj[0].x = 10;
   
// Values after changing original value
console.log("After changing original value");
   
console.log("Original value ", obj);
   
console.log("Shallow Copy value ", shallowCopy);


在这里, const _ = require('lodash')用于将 lodash 库导入文件。

输出:

Comparing original with shallow  false
After changing original value
Original value  { x: 10 }
Shallow Copy value  { x: 23 }

示例 2:克隆复杂对象

javascript

const _ = require('lodash');
   
var obj = [{  x: 1 }, {y: 2}];
  
// Shallow copy
var shallowCopy = _.clone(obj);
   
console.log('Comparing original with shallow ',
            obj[0] === shallowCopy[0]);
   
// Changing original value
obj[0].x = 10;
   
// Values after changing original value
console.log("After changing original value");
   
console.log("Original value ", obj);
   
console.log("Shallow Copy value ", shallowCopy);

输出:

Comparing original with shallow  true
After changing original value
Original value  [ { x: 10 }, { y: 2 } ]
Shallow Copy value  [ { x: 10 }, { y: 2 } ]

因此,在这里我们已经看到,在更改原始值之后,浅拷贝值也发生了变化,因为 _.clone() 没有深度复制它只是传递了引用。

注意:这在普通 JavaScript 中不起作用,因为它需要安装库 lodash。

参考: https://lodash.com/docs/4.17.15#clone