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

目录
  • js深度合并两个数组对象
  • 关于数组对象的深浅合并

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;
  }

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

(0)

相关推荐

  • JavaScript中合并数组的N种方法

    这是一篇简单的文章,关于JavaScript数组使用的一些技巧.我们将使用不同的方法结合/合并两个JS数组,以及讨论每个方法的优点/缺点. 让我们先考虑下面这情况: 复制代码 代码如下: var a = [ 1, 2, 3, 4, 5, 6, 7, 8, 9 ]; var b = [ "foo", "bar", "baz", "bam", "bun", "fun" ]; 很显然最简单的结

  • javascript合并两个数组最简单的实现方法

    在开发的过程中,我们很多时候会遇到需要将两个数组合并成一个数组的情况出现. var arr1 = [1, 2, 3]; var arr2 = [4, 5, 6]; // 将arr1和arr2合并成为[1, 2, 3, 4, 5, 6] 这里总结一下在JavaScript中合并两个数组的方法. for循环数组 这个方式是最简单的,也是最容易实现的. var arr3 = []; // 遍历arr1 for (var i = 0; i < arr1.length; i++) { arr3.push(

  • js对象合并的4种方式与数组合并的4种方式

    目录 一.对象合并 1.拓展运算符(...) 2.Object.assign() 3.递归赋值 4.jquery中的extend() 二.数组合并 1.扩展操作符 2.使用array.concat()方法进行合并 3.关于Apply 4.array.push()方法进行合并 一.对象合并 1.拓展运算符(...) ES6入门中是这样说的: 对象的扩展运算符(...)用于取出参数对象的所有可遍历属性,拷贝到当前对象之中. let obj1 = {     name: '陈伟停',     gend

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

    目录 js深度合并两个数组对象 关于数组对象的深浅合并 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].construc

  • JS实现合并两个数组并去除重复项只留一个的方法

    本文实例讲述了JS实现合并两个数组并去除重复项只留一个的方法.分享给大家供大家参考,具体如下: //It's merge arr1 and arr2 , delete the same element only leave one //It's only apdapter array. If object, no. //The sequence of the two array is not required. mergeArray:function (arr1, arr2){ for (var

  • JS合并两个数组的3种方法详解

    这篇文章主要介绍了JS合并两个数组的3种方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 需要将两个数组合并成为一个的情况.比如: var a = [1,2,3]; var b = [4,5,6]; 有两个数组a.b,需求是将两个数组合并成一个.方法如下: 1.concat js的Array对象提供了一个叫concat()方法,连接两个或更多的数组,并返回结果. var c = a.concat(b); //c=[1,2,3,4,5,6]

  • Node.js中如何合并两个复杂对象详解

    前言 相信大家都知道在通常情况下,在Node.js中我们可以通过underscore的extend或者lodash的merge来合并两个对象,但是对于像下面这种复杂的对象,要如何来应对呢?下面来一起学习学习吧. Node.js合并两个复杂对象 例如我有以下两个object: var obj1 = { "name" : "myname", "status" : 0, "profile": { "sex":&q

  • JavaScript如何把两个数组对象合并过程解析

    这篇文章主要介绍了JavaScript如何把两个数组对象合并过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 合并数组或者对象在数组或对象前面加...,是es6的新写法,然后数组的map方法会返回数组. var obj1 = [{ "id": 980550455852, "model": "XQG70-S1208FW", "color": "白",

  • es6 js 匹配两个数组对象的方法

    判断两个数组用的value是否相等 this.list = [ { user_type: 0, user_id: 1003, department_id: 1, department_name: "公司xx", mobile: "", realname: "廖xx", com_name: "任公司", label: "廖建平", value: 1003 }, { user_type: 0, user_id:

  • JavaScript简单实现合并两个Json对象的方法示例

    本文实例讲述了JavaScript简单实现合并两个Json对象的方法.分享给大家供大家参考,具体如下: $.mergeJsonObject = function(jsonbject1, jsonbject2) { var resultJsonObject = {}; for (var attr in jsonbject1) { resultJsonObject[attr] = jsonbject1[attr]; } for (var attr in jsonbject2) { resultJso

  • JavaScript合并两个数组并去除重复项的方法

    本文实例讲述了JavaScript合并两个数组并去除重复项的方法.分享给大家供大家参考.具体实现方法如下: Array.prototype.unique = function() { var a = this.concat(); for(var i=0; i for(var j=i+1; j if(a[i] === a[j]) a.splice(j, 1); } } return a; }; //Demo var array1 = ["a","b"]; var ar

  • python实现合并两个数组的方法

    本文实例讲述了python实现合并两个数组的方法.分享给大家供大家参考.具体如下: python合并两个数组,将两个数组连接成一个数组,例如,数组 a=[1,2,3] ,数组 b=[4,5,6],连接后:[1,2,3,4,5,6] 方法1 a=[1,2,3] b=[4,5,6] a=a+b 方法2 a=[1,2,3] b=[4,5,6] a.extend(b) 希望本文所述对大家的Python程序设计有所帮助.

随机推荐