|
面试题:
题目:Object.assign 是浅拷贝还是深拷贝? 考点:对于Object.assign 方法的理解,扩展:其实可以进行实现深拷贝的方法 参考:Object.assign ()方法详解,请点击 答案:当对象中只有一级属性,没有二级属性的时候,此方法为深拷贝,但是对象中有对象的时候,此方法,在二级属性以后就是浅拷贝 如以下对象: let obj1 = {
a: 1,
b: {
f: {
g: 1
}
},
c: [1, 2, 3]
};那上面这种有多层对象嵌套的,如何进行深拷贝呢? 1、使用JSON.stringify 和 JSON.parse用 JSON.stringify 把对象转换成字符串,再用 JSON.parse 把字符串转换成新的对象。 注:可以转成 JSON 格式的对象才能使用这种方法,如果对象中包含 function 或 RegExp 这些就不能用这种方法了。 2、通过jQuery的extend方法实现深拷贝 let $ = require('jquery');
let obj1 = {
a: 1,
b: {
f: {
g: 1
}
},
c: [1, 2, 3]
};
let obj2 = $.extend(true, {}, obj1);3、lodash.cloneDeep()实现深拷贝 let _ = require('lodash');
let obj1 = {
a: 1,
b: { f: { g: 1 } },
c: [1, 2, 3]
};
let obj2 = _.cloneDeep(obj1);4、使用递归的方式实现深拷贝 function _deepClone(source) {
let target;
if (typeof source === 'object') {
target = Array.isArray(source) ? [] : {}
for (let key in source) {
if (source.hasOwnProperty(key)) {
if (typeof source[key] !== 'object') {
target[key] = source[key]
} else {
target[key] = _deepClone(source[key])
}
}
}
} else {
target = source
}
return target
}参考:https://www.jianshu.com/p/1b212581a8d5 |
|
|
|
沙发#
发布于:2021-03-02 09:54
|
|