zoukankan      html  css  js  c++  java
  • js中数组的合并和对象的合并

    1 数组合并


    1.1 concat 方法

    1 var a=[1,2,3],b=[4,5,6];
    2 var c=a.concat(b);
    3 console.log(c);// 1,2,3,4,5,6
    4 console.log(a);// 1,2,3  不改变本身

    1.2 循环遍历

    1 var arr1=['a','b'];
    2 var arr2=['c','d','e'];
    3  
    4 for(var i=0;i<arr2.length;i++){
    5       arr1.push(arr2[i]) 
    6 }
    7  
    8 console.log(arr1);//['a','b','c','d','e']

    1.3 apply
    合并数组arr1和数组arr2,使用Array.prototype.push.apply(arr1,arr2)  or arr1.push.apply(arr1,arr2);

    1 var arr1=['a','b'];
    2 var arr2=['c','d','e'];
    3  
    4 Array.prototype.push.apply(arr1,arr2);
    5  
    6 //或者
    7 arr1.push.apply(arr1,arr2);<br>console.log(arr1) //['a','b','c','d','e']

    2 对象合并


    2.1 $.extend()

    1 var obj1= {'a': 1};
    2 var obj2= {'b': 1};
    3 var c = $.extend(obj1, obj2);
    4     
    5 console.log(obj1); // {a: 1, b: 1}  obj1已被修改
    6     
    7 //或者 <br>var obj3 = $.extend({}, obj1, obj2) <br>console.log(obj3); //{a: 1, b: 1} 不会改变obj1,obj2

    2.2 遍历赋值

    1 var obj1={'a':1};
    2 var obj2={'b':2,'c':3};
    3 for(var key in obj2){
    4      if(obj2.hasOwnProperty(key)===true){    <br>     //此处hasOwnProperty是判断自有属性,使用 for in 循环遍历对象的属性时,原型链上的所有属性都将被访问会避免原型对象扩展带来的干扰
    5            obj1[key]=obj2[key];
    6 } 
    7 }
    8  
    9 console.log(obj1);//{'a':1,'b':2,'c':3};

    2.3 Obj.assign()

     1 可以把任意多个的源对象自身的可枚举属性拷贝给目标对象,然后返回目标对象。
     2 
     3 Object.assign(target, ...sources)
     4     
     5 //a. 复制一个对象<br>var obj = { a: 1 ,b:2};
     6 var copyObj = Object.assign({}, obj);
     7 console.log(copyObj); // { a: 1,b:2 }<br><br>//b.合并多个对象
     8     
     9 var o1 = { a: 1 };
    10 var o2 = { b: 2 };
    11 var o3 = { c: 3 };
    12 
    13 var obj = Object.assign(o1, o2, o3);
    14 console.log(obj); // { a: 1, b: 2, c: 3 }
    15 console.log(o1);  // { a: 1, b: 2, c: 3 }, 且目标对象自身也会改变。 

    2.4 对象的深拷贝和浅拷贝
    2.4.1 浅拷贝

     1 var obj1={'a':1};
     2 var obj2={'b':{'b1':22,'b2':33}};
     3 
     4 $.extend(obj1, obj2);   //obj1拷贝了obj2的属性
     5 
     6 console.log(obj1)  // {'a':1,'b'{'b1':22,'b2':33}}
     7 console.log(obj1.b.b1)  // 22
     8 
     9 obj2.b.b1=44;   //obj2重新赋值
    10 console.log(obj1.b.b1)  // 44  obj1.b仅拷贝了对象的指引,所以受原obj2的影响

    2.4.2 深拷贝

     1 var obj1={'a':1};
     2 var obj2={'b':{'b1':22,'b2':33}};
     3 
     4 $.extend(true,obj1, obj2);   //第一个参数设为true表示深复制
     5 
     6 console.log(obj1)  // {'a':1,'b'{'b1':22,'b2':33}}
     7 console.log(obj1.b.b1)  // 22
     8 
     9 obj2.b.b1=44;   //obj2重新赋值
    10 console.log(obj1.b.b1)  // 22 obj1拷贝了obj2的所有属性以及值,并不受obj2的影响

     

     

  • 相关阅读:
    Apache Spark 2.2.0 中文文档
    Apache Spark 2.2.0 中文文档
    Apache Spark 2.2.0 中文文档
    Apache Spark 2.2.0 中文文档
    Apache Spark 2.2.0 中文文档
    Apache Spark RDD(Resilient Distributed Datasets)论文
    Apache Spark 2.2.0 中文文档
    Apache Spark 2.2.0 中文文档
    【机器学习实战】第10章 K-Means(K-均值)聚类算法
    [译]flexbox全揭秘
  • 原文地址:https://www.cnblogs.com/1301694f/p/9834620.html
Copyright © 2011-2022 走看看