JavaScript常用工具——深度克隆(可直接复制)

前言

在项目中,一些对象数据我们不能直接拿来赋值的使用,否则可能引起原对象的变化,不符合开发的规范。

例如vuex中存储的一些对象

这时候我们需要进行深度克隆

关于深度克隆和浅层克隆的知识点,可以看我之前的博客

JavaScript之克隆(浅层克隆,深度克隆)

以下是我所些的深度克隆函数,可以直接copy使用

deepCopy.js

// deepCopy
function typeOf(obj) {
  const { toString } = Object.prototype;
  const map = {
    '[object Boolean]': 'boolean',
    '[object Number]': 'number',
    '[object String]': 'string',
    '[object Function]': 'function',
    '[object Array]': 'array',
    '[object Date]': 'date',
    '[object RegExp]': 'regExp',
    '[object Undefined]': 'undefined',
    '[object Null]': 'null',
    '[object Object]': 'object',
  };
  return map[toString.call(obj)];
}

function deepCopy(data) {
  const temp = typeOf(data);
  let obj;

  if (temp === 'array') {
    obj = [];
  } else if (temp === 'object') {
    obj = {};
  } else {
    return data;
  }

  if (temp === 'array') {
    for (let i = 0; i < data.length; i += 1) {
      obj.push(deepCopy(data[i]));
    }
  } else if (temp === 'object') {
    Object.keys(data)
      .forEach((key) => {
        obj[key] = deepCopy(data[key]);
      });
  }
  return obj;
}

export default function (obj) {
  return deepCopy(obj);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值