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] } }) } }) },
關(guān)于數(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)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
TypeScript與JavaScript項目里引入MD5校驗和
這篇文章主要介紹了TypeScript與JavaScript項目里引入MD5校驗和,MD5校驗和可以用于驗證網(wǎng)絡(luò)文件傳輸?shù)耐暾砸约胺乐刮募蝗舜鄹?。下文我們就一起來學習TypeScript與JavaScript項目里引入MD5校驗和_MD5校驗,需要的朋友可以參考一下2022-02-02window.onbeforeunload方法在IE下無法正常工作的解決辦法
下面的代碼可以做到不管用戶是點擊了關(guān)閉,或者是在任務(wù)欄關(guān)閉、點擊后退、刷新、按F5鍵,都可以檢測到用戶即將離開的消息。2010-01-01JavaScript實現(xiàn)繼承的4種方法總結(jié)
這篇文章主要介紹了JavaScript實現(xiàn)繼承的4種方法總結(jié),本文給出了原型鏈繼承、構(gòu)造繼承、實例繼承、拷貝繼承等實現(xiàn)JS繼承的方法,需要的朋友可以參考下2014-10-10