评论

对象和数组的深拷贝

对象和数组的深拷贝

// 深拷贝对象
function deepAssignObject(…parm) {
let result = {};
parm.forEach(v => {
if (Reflect.toString.call(v) !== “[object Object]”) {
throw new Error(‘参数错误’);
}
Object.keys(v).forEach(key => {
switch (Reflect.toString.call(v[key])) {
case “[object Object]”:
result[key] = deepAssignObject(v[key]);
break;
case “[object Array]”:
result[key] = deepAssignArray(v[key]);
break;
default:
result[key] = v[key];
break;
}
});
});
return result;
}

// 深拷贝数组
function deepAssignArray(…parm) {
let result = [];
parm.forEach(v => {
if (Reflect.toString.call(v) !== “[object Array]”) {
throw new Error(‘参数错误’);
}
v.forEach(item => {
switch (Reflect.toString.call(item)) {
case “[object Object]”:
result.push(deepAssignObject(item));
break;
case “[object Array]”:
result.push(deepAssignArray(item))
break;
default:
result.push(item);
break;
}
});
});
return result;
}

点赞 0
收藏
评论

5 个评论

  • 漫
    2019-06-04

    spread operator(展开操作符)也适用于对象。用以下方法克隆对象:


    const newObj = { ...oldObj }


    2019-06-04
    赞同
    回复
  • 漫
    2019-06-04
    const a = [1, 2, 3]
     
    const b = [...a, 4, 5, 6]
     
    const c = [...a]


    2019-06-04
    赞同
    回复
  • 漫
    2019-06-04

    (展开操作符)

    您可以使用展开操作符 ... 展开数组,对象或字符串。

    让我们从一个数组示例开始。查看以下内容:




    2019-06-04
    赞同
    回复
  • 漫
    2019-06-04


    现在es6更先进,不用这么麻烦的。用展开操作符就OK了。

    一步到位!!!


    ES6 带来的重大特性



    2019-06-04
    赞同
    回复 1
    • 氵
      2022-08-01
      有些方法在小程序中无效 请实践一下
      2022-08-01
      回复
  • 贾荣涛
    贾荣涛
    2019-06-04

    没啥用啊 很多类型比如date还是浅克隆 能实现的功能和JSON.parse(JSON.stringify())差不多,问题循环结构还是炸了啊

    2019-06-04
    赞同
    回复
登录 后发表内容