Javascript實用方法之json合並的場景分析
場景
2個json合並,
jQuery 的“extend()”方法有兩個原型:合並的方法,分別是淺合並和深度合並,其實淺合並隻是json的第一層被合並,而深度合並是全部層數都被合並,分別如下寫法:
1.淺合並,target被object1…合並,隻有一層
$.extend( target [, object1 ] [, objectN ] )
-
深度合並,target被object1…合並,包含一層二層三層…
要深度合並, [deep]需要為true, 後面覆蓋前面,所以如要要保留後面的,則需要 object1 =$.extend(true,target,object1) ,但target已經變化瞭
$.extend( [deep ], target, object1 [, objectN ] )
這是jquery自帶的,下面帶大傢看看javascript如何實現。
代碼
1.深度合並(遞歸)
/** * 遇到相同元素級屬性,以(minor)為準 // 不返還新Object,而是main改變 * mirror * main */ function mergeJSON(minor, main) { for(var key in minor) { if(main[key] === undefined) { // 不沖突的,直接賦值 main[key] = minor[key]; continue; } // 沖突瞭,如果是Object,看看有麼有不沖突的屬性 // 不是Object 則以(minor)為準為主, //console.log(key) if(isJSON(minor[key])||isArray(minor[key])) { // arguments.callee 遞歸調用,並且與函數名解耦 console.log("is json") //arguments.callee(minor[key], main[key]); mergeJSON(minor[key], main[key]); }else{ main[key] = minor[key]; } } } //判斷是否是json function isJSON(target) { return typeof target == "object" && target.constructor == Object; } //判斷是否是array function isArray(o) { return Object.prototype.toString.call(o) == '[object Array]'; }
測試
var a = { ccc: { d: 111, b: 222, a: 222, ee: [{ a: 1 }, { b: 2 }] } }; var b = { ccc: { fff: 666, ee: [{ c: 3 }] } }; mergeJSON(b, a); console.log(a); console.log(b);
到此這篇關於Javascript實用方法之json合並的文章就介紹到這瞭,更多相關js json合並內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- JavaScript深拷貝的幾種實現方法實例
- JavaScript嚴格模式use strict的介紹
- JS深入淺出Function與構造函數
- 深入理解JavaScript 變量對象
- javascript進階篇深拷貝實現的四種方式