基于jq的js对象复制的非递归算法
基于jq的js对象复制的非递归算法
甜酒0917 发表于1年前
基于jq的js对象复制的非递归算法
  • 发表于 1年前
  • 阅读 22
  • 收藏 0
  • 点赞 0
  • 评论 0

标题:腾讯云 新注册用户域名抢购1元起>>>   

var extend= function() {
	var options, name, src, copy, copyIsArray, clone,
		target = arguments[ 0 ] || {},
		i = 1,
		length = arguments.length,
		deep = false;

	// Handle a deep copy situation
	if ( typeof target === "boolean" ) {
		deep = target;

		// Skip the boolean and the target
		target = arguments[ i ] || {};
		i++;
	}

	// Handle case when target is a string or something (possible in deep copy)
	if ( typeof target !== "object" && !jQuery.isFunction( target ) ) {
		target = {};
	}

	// Extend jQuery itself if only one argument is passed
	if ( i === length ) {
		target = this;
		i--;
	}

	for ( ; i < length; i++ ) {

		// Only deal with non-null/undefined values
		if ( ( options = arguments[ i ] ) != null ) {
        
			// Extend the base object
			for ( name in options ) {
				
				
				src = target[ name ];
				copy = options[ name ];
    
				// Prevent never-ending loop
				if ( target === copy ) {
				
					continue;
				}

				// Recurse if we're merging plain objects or arrays
              if ( deep && copy && ( jQuery.isPlainObject( copy ) ||
					( copyIsArray = jQuery.isArray( copy ) ) ) ) {
				   

					if ( copyIsArray ) {
						copyIsArray = false;
						clone = src && jQuery.isArray( src ) ? src : [];

					} else {
						clone = src && jQuery.isPlainObject( src ) ? src : {};
					}                  
                   var ary=[];
				   var mem={};
			       mem['.'+name]=jQuery.isPlainObject( copy )?{}:(jQuery.isArray( copy ) ? [] : '');	  
                   for(var j in copy){
                       ary.push({name:'.'+name+'.'+j,value:copy[j]});
			           mem['.'+name+'.'+j]=jQuery.isPlainObject( copy[j] )?{}:(jQuery.isArray( copy[j] ) ? [] : '');
                   }
				   
				   
               while(ary.length>0){
                    var temb=ary.shift();
						
                  if( jQuery.isPlainObject( temb.value ) ||( copyIsArray = jQuery.isArray( temb.value ))){
                 	   mem[temb.name]=jQuery.isPlainObject( temb.value )?{}:(jQuery.isArray( temb.value ) ? [] : '');            
                       for(var k in temb.value){			
                           ary.push({name:temb.name+'.'+k,value:temb.value[k]});
                           mem[temb.name+'.'+k]=jQuery.isPlainObject( temb.value[k] )?{}:(jQuery.isArray( temb.value[k] ) ? [] : '');            
                         }                        
				  }else{
					  var aryA=temb.name.split(".");
					  var tembName='';
                      var tempTarget=target;
					  for(var n=1,len=aryA.length;n<len;n++){
					     if(tempTarget!=undefined){
						    console.log('1',tempTarget)
                            if(n!=(len-1)){						  
						     tempTarget[aryA[n]]=tempTarget[aryA[n]]||mem[tembName+'.'+aryA[n]];					   
						    }else{							
                            tempTarget[aryA[n]]=temb.value;						
						    }
						    tembName=tembName+'.'+aryA[n];
						    tempTarget= tempTarget[aryA[n]];	
					     }
					   }
					 }
                   }
				// Don't bring in undefined values
				} else if ( copy !== undefined ) {
				
					target[ name ] = copy;
				}
			}
		}
	}
	// Return the modified object
		console.log(target)
	return target;
};
var a={a:{a:1,b:2},b:3,c:{e:44,ff:[1,4,5]}};	
var b={};
	extend(true,b,a);
	alert(b.c.ff[1])

 

共有 人打赏支持
粉丝 1
博文 12
码字总数 3354
×
甜酒0917
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: