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

    一、

    使用JSON.parse() 和 JSON.stringify(),但是它有局限性,当值为function、undefined、Symbol时,转换中会被忽略。

    二、

    function deepCopy(obj){
        var result = Array.isArray(obj) ? [] : {}
        for(var key in obj) {
            if (obj.hasOwnProperty(key)) {
                if(typeof obj[key] === 'object' && obj[key]!==null){
                    result[key] = deepCopy(obj[key]);
                } else {
                    result[key] = obj[key]
                }
            }
        }
        return result;
    }

    这部分参考自https://www.cnblogs.com/renbo/p/9563050.html

    三、

    function getType(obj){ // getType函数对元素进行类型判断
        var toString = Object.prototype.toString;
        var map = {
            '[object Boolean]': 'boolean',
            '[object Number]': 'number',
            '[object String]': 'string',
            '[object Undefined]': 'undefined',
            '[object Null]': 'null',
            '[object Object]': 'object',
            '[object Array]': 'array',
            '[object Function]': 'function',
            '[object Date]': 'date',
            '[object RegExp]': 'regExp'
        };
        if(obj instanceof Element){return 'element'}
        return map[toString.call(obj)]
    }
    
    function deepClone(data){
        var type = getType(data), obj;
        if(type === 'array'){
            obj = []
            for(var i = 0, len = data.length; i<len; i++){
                obj.push(deepCopy(data[i]))
                // obj[i] = deepCopy(data[i])
            }
        } else if(type === 'object'){
            obj = {}
            for(var key in data){
                obj[key] = deepCopy(data[key])
            }
        } else {
            return data;
        }
        return obj;
    }

    四、Object.assign() 与 slice() 只能实现浅拷贝

  • 相关阅读:
    Oracle 分析函数
    Oracle 增加修改删除字段
    Oracle 重置序列
    End2EndIT
    Hyperledger Fabric SDK use case 1
    云计算中8项核心技术
    Cloud
    JVM Guide
    微信公众平台PHP开发
    在Linux系统环境下修改MySQL的root密码
  • 原文地址:https://www.cnblogs.com/songya/p/11490502.html
Copyright © 2011-2022 走看看