最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

js深度合并兩個數(shù)組對象的實現(xiàn)

 更新時間:2022年12月03日 10:13:46   作者:CahierX  
這篇文章主要介紹了js深度合并兩個數(shù)組對象的實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

js深度合并兩個數(shù)組對象

js合并兩個數(shù)組對象, 如果a中含有b,則b的值覆蓋a的值 如果a中不含有b 則b的值新增到a

MergeRecursive(obj1, obj2) {
    // 合并兩個數(shù)組
    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') { // 數(shù)組里面的數(shù)據(jù)也是數(shù)組對象 則進行查找重復并賦值
                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] // 數(shù)組 但是里面的數(shù)據(jù)是普通類型 直接賦值
              }
            }
          } else {
            obj1[p] = obj2[p] // 普通類型有直接賦值 obj1沒有的就創(chuàng)建并賦值
          }
        }
      } 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]
          }
        })
      }
    })
  },

關于數(shù)組對象的深淺合并

數(shù)組對象的深淺合并

  • 淺合并:只會把沒有沖突的屬性合并上,對于有沖突的屬性,后者會完全覆蓋前者的屬性值,且只會合并第一層
  • 深合并:對于有沖突的屬性,會把將兩個屬性值進行合并,而不是簡單的讓誰覆蓋誰
function deepMearge(obj, target={}) {
    // target 替換 obj
    let p = {}; // 是為了調(diào)用 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 方法可以把一個類數(shù)組對象轉(zhuǎn)為數(shù)組
        obj[key] = Array.from(new Set(obj[key].concat(target[key]))
        )
      } else {
        obj[key] = target[key];
      }
    }
    return obj;
  }

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

最新評論

冀州市| 荆州市| 彭山县| 乌兰县| 舟曲县| 景宁| 三都| 神木县| 盐边县| 枣庄市| 光泽县| 江城| 钟山县| 民县| 托克托县| 丰原市| 湄潭县| 诏安县| 密云县| 公安县| 察哈| 汕头市| 垣曲县| 大足县| 扎鲁特旗| 大方县| 建昌县| 南华县| 锦州市| 惠州市| 清涧县| 霍州市| 上犹县| 翁牛特旗| 盐源县| 普洱| 方城县| 哈巴河县| 西丰县| 高邮市| 南靖县|