面试中我们经常会被问到有没有用过深拷贝,它的实现方式是什么,为此我专门归纳了几种方式。
1.JSON.parse(JSON.stringfy())
let a = {
name:'张三',
age:20,
gender:'男'
}
b = JSON.parse(JSON.stringfy(a))
b.name='李四'
b.age=25
b.gender='女'
console.log(b) // {name:'李四',age:25,gender:'女'}
2.递归
<script>
function deepCopy(obj) {
let result = Array.isArray(obj) ? [] : {};
for (let key in obj) {
if (obj.hasOwnProperty(key)) {
if (typeof obj[key] === 'object' && obj[key] !== null) {
result[key] = deepCopy(obj[key]);
} else {
result[key] = obj[key];
}
}
}
return result;
}
let a={name:'张三',age:22,gender:'男'}
console.log(deepCopy(a)); //{name:'张三',age:22,gender:'男'}
</script>
3.JQ的extend方法
<script src="./jquery-1.12.4.js"></script>
<script>
let a = [0, 1, [2, 3], 4]
b = $.extend(true, [], a)
a[0] = 1
a[1]=2
a[2][0] = 3
a[2][1]=4
a[3]=5
console.log(a, b);
</script>
打印结果如下:
4. lodash工具库
1.下包npm i --save lodash
2.使用
import _ from 'lodash
const a = { name: '张三', age: 20 }
const b = _.cloneDeep(a)
console.log('b', b) // { name: '张三', age: 20 }