function clone(obj) {
let result = null;
if(typeof obj === 'object' && obj !== null) {
result = obj instanceof Array ? [] : {};
for(let v in obj) {
result[v] = clone(obj[v])
}
}else {
result = obj
}
return result;
}
一般情况 JSON.parse(JSON.stringify(obj))够用
不够的话 使用lodash的cloneDeep方法
生产环境下尽量不要自己实现吧。
如果想自己琢磨一下,那可以写写看。
需要注意的点特别多,对逻辑严密性要求很高。
一般要考虑,特殊值拷贝(比如null, undefined, 空白元素列表等)、引用关系保留、循环引用、如果用递归会不会爆栈等等。
面试的话就老老实实写便利
开发中的话
let newObj = Object.assgin({},oldObj)
或者
let newObj = JSON.parse(JSON.stringfy(oldObj))
8 回答4.6k 阅读✓ 已解决
6 回答3.3k 阅读✓ 已解决
5 回答2.8k 阅读✓ 已解决
5 回答6.3k 阅读✓ 已解决
4 回答2.2k 阅读✓ 已解决
4 回答2.7k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决