zoukankan      html  css  js  c++  java
  • js对象深拷贝

    /**
    *对象深拷贝2018-3-2
    *使用方法deepAssign(obj1,obj2...)
    **/        
    		
    		
    		
    		//测试
    		//var china = {
            //    nation : '中国',
            //    birthplaces:['北京','上海','广州'],
            //    skincolr :{aa:111,bb:{qq:{hahha:{kkkk:"哈哈哈"}}}},
            //    friends:['sk','ls']
           // }
           // var result = {name:'result', skincolr :{aa:111,bb:{qq:{hahha:{kkkk:"可以啦啦啦啦"}}}}}
    
            //深复制,要想达到深复制就需要用递归
            function isObj(x){
                var type = typeof x;
                return x !== null && (type === 'object' || type === 'function');
            }
    
            var hasOwnProperty = Object.prototype.hasOwnProperty;
            var propIsEnumerable = Object.prototype.propertyIsEnumerable;
    
            function toObject(val) {
                if (val === null || val === undefined) {
                    throw new TypeError('Cannot convert undefined or null to object');
                }
    
                return Object(val);
            }
    
            function assignKey(to, from, key) {
                var val = from[key];
    
                if (val === undefined || val === null) {
                    return;
                }
    
                if (hasOwnProperty.call(to, key)) {
                    if (to[key] === undefined || to[key] === null) {
                        throw new TypeError('Cannot convert undefined or null to object (' + key + ')');
                    }
                }
    
                if (!hasOwnProperty.call(to, key) || !isObj(val)) {
                    to[key] = val;
                } else {
                    to[key] = assign(Object(to[key]), from[key]);
                }
            }
    
            function assign(to, from) {
                if (to === from) {
                    return to;
                }
    
                from = Object(from);
    
                for (var key in from) {
                    if (hasOwnProperty.call(from, key)) {
                        assignKey(to, from, key);
                    }
                }
    
                if (Object.getOwnPropertySymbols) {
                    var symbols = Object.getOwnPropertySymbols(from);
    
                    for (var i = 0; i < symbols.length; i++) {
                        if (propIsEnumerable.call(from, symbols[i])) {
                            assignKey(to, from, symbols[i]);
                        }
                    }
                }
    
                return to;
            }
    
            function deepAssign(target) {
                target = toObject(target);
    
                for (var s = 1; s < arguments.length; s++) {
                    assign(target, arguments[s]);
                }
    
                return target;
            };
           // deepAssign(china,result)
    		//console.log(china)
    

      

  • 相关阅读:
    POJ 3009
    POJ 3253
    POJ 3617
    POJ 3984
    UVA10012
    HDU5100
    HDU 5101
    UVA301 运输
    UVA 331 交换的方案数
    uva 10344 算23点
  • 原文地址:https://www.cnblogs.com/holy-amy/p/8492295.html
Copyright © 2011-2022 走看看