• 数组合并和对象合并的方法


    数组合并

    此处说明两种比较简单的方式:

    • concat实现

    特点:不改变原数组,生成新数组。

    •  ES6的扩展运算符(...)实现:

    特点:简洁。

    缺点:两种方式都存在的问题是:没有过滤掉重复元素“4”。

    扩展:过滤数组的重复元素实现。

    1. let arr1=[1,2,3,4];
    2. let arr2=[4,5,6,7,8];
    3. // 需求:求arr1和arr2合并后的数组,不能有重复的元素。
    4. let arr3=arr1.concat(arr2);
    5. console.log('concat合并后',arr3);
    6. let arr4=[...arr1, ...arr2];
    7. console.log('用扩展运算符合并后',arr4);
    8. // 过滤重复元素
    9. /* Array.from() 方法对一个类似数组或可迭代对象创建一个新的,浅拷贝的数组实例 */
    10. let arr5=Array.from(new Set(arr4)); // 方式1
    11. console.log('过滤重复元素后1',arr5);
    12. let arr6=[...new Set(arr4)] // 方式2
    13. console.log('过滤重复元素后2',arr6);
    14. let arr7=arr4.filter((item, index,arr)=>{ // 方式3
    15. // 所有元素只存一次
    16. if(arr.indexOf(item)===index){
    17. return item;
    18. }
    19. })
    20. console.log('过滤重复元素后3',arr7);
    21. let arr8=[]
    22. for(let i=0; ilength;i++){ // 方式4for循环
    23. // 只存第一次遍历到的元素
    24. if(arr8.indexOf(arr4[i])===-1){
    25. arr8.push(arr4[i])
    26. }
    27. }
    28. console.log('过滤重复元素后4',arr8);

    结果: 

    对象合并

    • for(let...in):结果是改变了没有被遍历的对象。
    • ES6扩展运算符(...
    • ES6的新增API:Object.assign(targetObj,obj1[,obj2,...])

    它们感叹的特点是:如果有属性重复时,后者的属性值被采纳。

    1. /* 对象合并*/
    2. //1、 for(let...in){}
    3. let obj1={
    4. name:'a',
    5. age:12
    6. }
    7. let obj2={
    8. sex:'男',
    9. class:'1',
    10. age:20,
    11. }
    12. for(let key in obj2){
    13. obj1[key]=obj2[key];
    14. }
    15. console.log('对象合并后1', obj1);
    16. let obja={
    17. name:'a',
    18. age:12
    19. }
    20. let objb={
    21. sex:'男',
    22. class:'1',
    23. age:20,
    24. }
    25. //2、 ES6新的APIObject.assgin(obj1, obj2)
    26. let newObj2=Object.assign(obja, objb)
    27. console.log('对象合并后2', newObj2);
    28. //3、ES6的扩展运算符: {...obj1, obj2}
    29. let newObj3={...obja, ...objb};
    30. console.log('对象合并后3', newObj3);

    结果:

     

  • 相关阅读:
    矩阵分析学习笔记(四):λ矩阵及其Smith标准型
    数据结构之算法复杂度篇
    如何将报告从 JasperReports 导入到 FastReport .NET?
    K8S:kubectl陈述式、声明式资源管理及金丝雀部署
    A40I工控主板(SBC-X40I)CAN接口测试
    leetcode 48. 旋转图像
    购物网站系统
    基于Python深度学习的文字检测识别系统
    数据挖掘实战(2):信用卡诈骗分析
    浅谈 Linux 孤儿进程和僵尸进程
  • 原文地址:https://blog.csdn.net/ilkcyc/article/details/126795996