zoukankan      html  css  js  c++  java
  • js的深拷贝

    1. 直接使用JSON.parse(JSON.stringify(Object))来进行
    缺点: 如果对象或者数组里有函数什么的, 就会出问题啦(也有解决办法)


    2. 使用ES的扩展运算符...
    let newObj = { ...data }
    相当于 let newObj = Object.assign({}, data)
    拷贝的属性是有限制的,基础数据类型会拷贝一份新的,引用数据类型拷贝的是其地址。


    3. 使用函数
    // 定义一个深拷贝函数 接收目标target参数

    function deepClone(target) {
        // 定义一个变量
        let result;
        // 如果当前需要深拷贝的是一个对象的话
        if (typeof target === 'object') {
        // 如果是一个数组的话
            if (Array.isArray(target)) {
                result = []; // 将result赋值为一个数组,并且执行遍历
                for (let i in target) {
                    // 递归克隆数组中的每一项
                    result.push(deepClone(target[i]))
                }
             // 判断如果当前的值是null的话;直接赋值为null
            } else if(target===null) {
                result = null;
             // 判断如果当前的值是一个RegExp对象的话,直接赋值    
            } else if(target.constructor===RegExp){
                result = target;
            }else {
             // 否则是普通对象,直接for in循环,递归赋值对象的所有值
                result = {};
                for (let i in target) {
                    result[i] = deepClone(target[i]);
                }
            }
         // 如果不是对象的话,就是基本数据类型,那么直接赋值
        } else {
            result = target;
        }
         // 返回最终结果
        return result;
    }
  • 相关阅读:
    第一个VS2015 Xaramin Android项目(续)
    第一个VS2015 Xaramin Android项目
    Android SDK Manager 无法打开
    VS 2015 Android 环境设置
    Unity 游戏运行越久加载越慢
    一不注意,在Unity3D中DllImport 引起的Bug.
    Animation显示ListView的每一条记录
    ViewFlipper
    BitmapFactory.Options对图片进行缩放
    显示倒计时的Button按钮
  • 原文地址:https://www.cnblogs.com/yoyotl/p/13212964.html
Copyright © 2011-2022 走看看