亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

js深度合并兩個(gè)數(shù)組對(duì)象

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

MergeRecursive(obj1, obj2) {
    // 合并兩個(gè)數(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ù)組對(duì)象 則進(jìn)行查找重復(fù)并賦值
                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) {
    // 查找重復(fù)并obj2的值賦給obj1
    Object.keys(obj1).forEach(key => {
      if (typeof obj1[key] === 'object') {
        try {
          if (key in obj2) { // 確保obj2有obj1的key 不然會(huì)導(dǎo)致失敗
            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中沒有的添加進(jìn)去
          if (!(obj2key in obj1)) {
            obj1[obj2key] = obj2[obj2key]
          }
        })
      }
    })
  },

關(guān)于數(shù)組對(duì)象的深淺合并

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

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

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

相關(guān)文章

  • js獲取域名的方法

    js獲取域名的方法

    這篇文章主要介紹了js獲取域名的方法,涉及window.location中常見方法的使用技巧,需要的朋友可以參考下
    2015-01-01
  • 微信小程序云開發(fā)之新手環(huán)境配置

    微信小程序云開發(fā)之新手環(huán)境配置

    這篇文章主要為大家詳細(xì)介紹了微信小程序云開發(fā)之新手環(huán)境配置,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • TypeScript與JavaScript項(xiàng)目里引入MD5校驗(yàn)和

    TypeScript與JavaScript項(xiàng)目里引入MD5校驗(yàn)和

    這篇文章主要介紹了TypeScript與JavaScript項(xiàng)目里引入MD5校驗(yàn)和,MD5校驗(yàn)和可以用于驗(yàn)證網(wǎng)絡(luò)文件傳輸?shù)耐暾砸约胺乐刮募蝗舜鄹?。下文我們就一起來學(xué)習(xí)TypeScript與JavaScript項(xiàng)目里引入MD5校驗(yàn)和_MD5校驗(yàn),需要的朋友可以參考一下
    2022-02-02
  • layui復(fù)選框的全選與取消實(shí)現(xiàn)方法

    layui復(fù)選框的全選與取消實(shí)現(xiàn)方法

    今天小編就為大家分享一篇layui復(fù)選框的全選與取消實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-09-09
  • JS?中的?Event?Loop?是什么你真的懂

    JS?中的?Event?Loop?是什么你真的懂

    Event Loop,簡單翻譯就是?事件循環(huán),是 JS 語言下實(shí)現(xiàn)運(yùn)行時(shí)的一個(gè)機(jī)制,這篇文章主要介紹了JS?中的?Event?Loop?的基本知識(shí),需要的朋友可以參考下
    2022-06-06
  • 詳解JavaScript作用域 閉包

    詳解JavaScript作用域 閉包

    這篇文章主要介紹了JavaScript作用域 閉包的相關(guān)資料,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • javaScript封裝的各種寫法

    javaScript封裝的各種寫法

    這篇文章主要介紹了javaScript封裝的各種寫法,通過列舉優(yōu)缺點(diǎn)和使用場景詳細(xì)介紹了幾種封裝的格式,需要的朋友可以參考下
    2017-08-08
  • 淺析微信小程序自定義日歷組件及flex布局最后一行對(duì)齊問題

    淺析微信小程序自定義日歷組件及flex布局最后一行對(duì)齊問題

    這篇文章主要介紹了微信小程序自定義日歷組件及flex布局最后一行對(duì)齊問題,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-10-10
  • window.onbeforeunload方法在IE下無法正常工作的解決辦法

    window.onbeforeunload方法在IE下無法正常工作的解決辦法

    下面的代碼可以做到不管用戶是點(diǎn)擊了關(guān)閉,或者是在任務(wù)欄關(guān)閉、點(diǎn)擊后退、刷新、按F5鍵,都可以檢測到用戶即將離開的消息。
    2010-01-01
  • JavaScript實(shí)現(xiàn)繼承的4種方法總結(jié)

    JavaScript實(shí)現(xiàn)繼承的4種方法總結(jié)

    這篇文章主要介紹了JavaScript實(shí)現(xiàn)繼承的4種方法總結(jié),本文給出了原型鏈繼承、構(gòu)造繼承、實(shí)例繼承、拷貝繼承等實(shí)現(xiàn)JS繼承的方法,需要的朋友可以參考下
    2014-10-10

最新評(píng)論