返回顶部
首页 > 资讯 > 前端开发 > JavaScript >js深度合并两个数组对象的实现
  • 362
分享到

js深度合并两个数组对象的实现

js深度合并数组对象js合并数组对象合并数组对象 2022-12-03 22:12:17 362人浏览 安东尼
摘要

目录js深度合并两个数组对象关于数组对象的深浅合并js深度合并两个数组对象 js合并两个数组对象, 如果a中含有b,则b的值覆盖a的值 如果a中不含有b 则b的值新增到a Merge

js深度合并两个数组对象

js合并两个数组对象, 如果a中含有b,则b的值覆盖a的值 如果a中不含有b 则b的值新增到a

MergeRecursive(obj1, obj2) {
    // 合并两个数组
    for (var p in obj2) {
      if (obj1[p] === undefined) { // 如果obj1没有p 直接把obj2的p加入
        obj1[p] = obj2[p]
      }
      try {
        if (obj2[p].constructor === Object) {
          obj1[p] = common.MergeRecursive(obj1[p], obj2[p])
        } else {
          if (typeof obj1[p] === 'object') {
            for (let i = 0; i < obj2[p].length; i++) {
              if (typeof obj2[p][i] === 'object') { // 数组里面的数据也是数组对象 则进行查找重复并赋值
                if (obj1[p][i] === undefined) { // 如果obj1中没有obj2的属性就把obj2的属性push到1里
                  obj1[p].push(obj2[p][i])
                } else {
                  common.uniq(obj1[p][i], obj2[p][i])
                }
              } else {
                obj1[p] = obj2[p] // 数组 但是里面的数据是普通类型 直接赋值
              }
            }
          } else {
            obj1[p] = obj2[p] // 普通类型有直接赋值 obj1没有的就创建并赋值
          }
        }
      } catch (e) {
        console.log(e)
      }
    }
    return obj1
  },
  uniq(obj1, obj2) {
    // 查找重复并obj2的值赋给obj1
    Object.keys(obj1).forEach(key => {
      if (typeof obj1[key] === 'object') {
        try {
          if (key in obj2) { // 确保obj2有obj1的key 不然会导致失败
            common.uniq(obj1[key], obj2[key])
          }
        } catch (err) {
          obj1 = obj2
        }
      } else {
        if (key in obj2) {
          obj1[key] = obj2[key]
        }
        Object.keys(obj2).forEach(obj2key => { // 把obj2中有的obj1中没有的添加进去
          if (!(obj2key in obj1)) {
            obj1[obj2key] = obj2[obj2key]
          }
        })
      }
    })
  },

关于数组对象的深浅合并

数组对象的深浅合并

  • 浅合并:只会把没有冲突的属性合并上,对于有冲突的属性,后者会完全覆盖前者的属性值,且只会合并第一层
  • 深合并:对于有冲突的属性,会把将两个属性值进行合并,而不是简单的让谁覆盖谁
function deepMearge(obj, target={}) {
    // target 替换 obj
    let p = {}; // 是为了调用 Object.prototype.toSring方便
    for(let key in target) {
      let isA = p.toString.call(obj[key]) === '[object Object]',
          isB = p.toString.call(target[key]) === '[object Object]';
      if(isA && isB) {
        obj[key] = deepMearge(obj[key], target[key])
      } else if(Array.isArray(obj[key]) && Array.isArray(target[key])){
        // Array.from 方法可以把一个类数组对象转为数组
        obj[key] = Array.from(new Set(obj[key].concat(target[key]))
        )
      } else {
        obj[key] = target[key];
      }
    }
    return obj;
  }

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: js深度合并两个数组对象的实现

本文链接: https://lsjlt.com/news/173993.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • js深度合并两个数组对象的实现
    目录js深度合并两个数组对象关于数组对象的深浅合并js深度合并两个数组对象 js合并两个数组对象, 如果a中含有b,则b的值覆盖a的值 如果a中不含有b 则b的值新增到a Merge...
    99+
    2022-12-03
    js深度合并数组对象 js合并数组对象 合并数组对象
  • es6 js 匹配两个数组对象的方法
    判断两个数组用的value是否相等 this.list = [ { user_type: 0, u...
    99+
    2024-04-02
  • jdk8使用stream实现两个list集合合并成一个(对象属性的合并)
    目录一、前言二、示例示例1:java8 合并两个 list<map>示例2:java8 合并两个 list<T>示例3:java8 合并两个 list<T>,集合个数前者小于后者,要...
    99+
    2024-04-02
  • 怎么使用JS动态合并两个对象的属性
    这篇文章给大家分享的是有关怎么使用JS动态合并两个对象的属性的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。我们可以使用扩展操作符(...)将不同的对象合并为一个对象,这也是合并两...
    99+
    2024-04-02
  • es6和js怎么匹配两个数组对象
    这篇文章主要介绍“es6和js怎么匹配两个数组对象”,在日常操作中,相信很多人在es6和js怎么匹配两个数组对象问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”es6和js怎么匹配两个数组对象”的疑惑有所帮助!...
    99+
    2023-06-29
  • php怎么实现两个数组合并并且求和
    实现方法:1、使用array_merge()函数合并两个数组,语法“array_merge(数组1,数组2)”,会返回一个包含两个数组中元素的合并数组;2、使用array_sum()函数计算并返回合并数组中所有元素的和即可,语法“array...
    99+
    2022-06-14
    php数组 php
  • php如何实现两个数组合并并且求和
    今天小编给大家分享一下php如何实现两个数组合并并且求和的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。实现方法:1、使用ar...
    99+
    2023-07-02
  • js对象合并的4种方式与数组合并的4种方式
    目录一、对象合并1、拓展运算符(...)2、Object.assign()3、递归赋值4、jquery中的extend()二、数组合并1、扩展操作符2、使用array.conca&#...
    99+
    2022-11-13
    js对象合并 js数组合并 对象与数组合并
  • js如何实现数组合并
    这篇文章主要介绍了js如何实现数组合并,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。数组合并使用展开操作符,也可以将多个数组合并起来。感谢你能够认真阅读完这篇文章,希望小编分...
    99+
    2023-06-27
  • es6合并两个对象的方法有哪些
    ES6合并两个对象的方法有以下几种: Object.assign()方法: 该方法将一个或多个源对象的属性复制到目标对象,并返回...
    99+
    2023-10-25
    es6
  • Pandas操作两个Excel实现数据对应行的合并
    目录写在前面主要思路写在前面 最近有朋友问我怎么把一个Excel工作表中的数据按照对应的匹配规则放到另外一个表中, 要求是两个对应的列要相同, 具体来看就是sheet1中数据比较多,...
    99+
    2023-01-17
    Pandas Excel行合并 Pandas Excel合并
  • Java实现把两个数组合并为一个的方法总结
    本文实例讲述了Java实现把两个数组合并为一个的方法。分享给大家供大家参考,具体如下:在Java中,如何把两个String[]合并为一个?看起来是一个很简单的问题。但是如何才能把代码写得高效简洁,却还是值得思考的。这里介绍四种方法,请参考选...
    99+
    2023-05-30
    java 数组合并 ava
  • Pandasmerge合并两个DataFram的实现
    目录Pandas merge保留左边的DataFramPandas merge pandas.merge()是pandas库中用于合并两个或多个DataFrame对象的函数,其常用的...
    99+
    2023-03-19
    Pandas merge合并DataFram Pandas merge DataFram
  • 两个有序数组的合并,python版
    看到其他部门的笔试题,发现有这个题目:两个有序数组的合并,于是尝试着用python写出来关键:1、两个数组已经排序好,所以内部无需比较,比较都是存在于两个数组之间2、比较结束后,需要将其中一个数组的剩余序列添加到最终的数组具体如下:if _...
    99+
    2023-01-31
    数组 两个 python
  • js中判断两个数组对象是否完全相等
    目录js判断两个数组对象是否完全相等js判断两个对象是否相等的办法,包含绝对相等和形状内容相等总结js判断两个数组对象是否完全相等 如何判断两个数组是否完全相等,如何判断两个对象是否...
    99+
    2023-05-16
    js判断数组 js判断数组对象 判断数组对象是否相等
  • javascript中如何动态合并两个对象的属性
    小编给大家分享一下javascript中如何动态合并两个对象的属性,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!我们可以使用扩展操作符(...)将不同的对象合并为...
    99+
    2023-06-15
  • PHP数组合并中的深度合并和浅层合并有什么区别?
    php 中合并数组有两种方法:深度合并和浅层合并。深度合并递归遍历数组,合并标量值和进行数组的深度合并。浅层合并仅逐个元素复制数组,后面的数组值覆盖前面的值,数组作为整体复制到结果中。 ...
    99+
    2024-04-28
    浅层合并 深层合并
  • 如何使用JS基于对象实现合并功能
    这篇文章给大家分享的是有关如何使用JS基于对象实现合并功能的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。浅拷贝的方式实现对象合并之前的一篇博文 有专门介绍对象和数组的深浅拷贝,不...
    99+
    2024-04-02
  • Java实现两个随机数组合并进行排序的方法
    目录前言:一、什么是线性表二、ArrayList集合三、用线性表的思想排序数组间排序四、冒泡排序:前言: ​ 小Du猿结束"996ICP"CRUD开发工作生活,重新进入了...
    99+
    2024-04-02
  • 怎么在JavaScript中将多个对象合并成一个数组
    怎么在JavaScript中将多个对象合并成一个数组?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。JavaScript有什么特点1、js属于一种解释性脚本语言;2、在绝大多...
    99+
    2023-06-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作