深拷贝实现,代码很简单,基本覆盖大多数场景
const clone = require('shallow-clone');
const typeOf = require('kind-of');
const isPlainObject = require('is-plain-object');
function deepCopy(value) {
switch (typeOf(value)) {
case 'object':
return deepCopyObj(value);
case 'array':
return deepCopyArr(value);
default:
return clone(value);
}
}
function deepCopyObj(value) {
if (isPlainObject(value)) {
var result = new value.constructor();
for (key in value) {
if (value.hasOwnProperty(key)) {
result[key] = deepCopy(value[key]);
}
}
return result;
}
return value;
}
function deepCopyArr(value) {
var result = new value.constructor(value.length);
for (var i = 0; i < value.length; i++) {
result[i] = deepCopy(value[i]);
}
return result;
}
module.exports = deepCopy;