国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

JavaScript實現JSON合并操作示例【遞歸深度合并】

2019-11-19 12:59:24
字體:
來源:轉載
供稿:網友

本文實例講述了JavaScript實現JSON合并操作。分享給大家供大家參考,具體如下:

為什么我會想到寫這幾行代碼

在實際工作中,我們會使用許多或自主開發或第三方的工具,有些工具的配置文件相當細節,使用頻率低倒也罷了,使用頻率高的話必然造成很多代碼冗余。所以我都會對這些工具做二次封裝,把不經常改動的配置給予默認值。如果需要改動,傳入新的配置覆蓋原來的配置即可。

起初我以為這是一項很簡單的需求

var json1 = {  // 固定的配置 a: 1, b: 2, c: 3,}var json2 = {  // 作為參數傳入的配置 a: 11, d: 14,}json3 = {  // 合并后的結果 a: 11, b: 2, c: 3, d: 14,}

如上述,確實很簡單。可事實是,當配置不再是僅僅一層嵌套時,常用的合并如$.extendfor in 賦值就不再能再解決問題了

var json1 = { a: 1, b: {  b1: 'hello',  b2: 'world', },}var json2 = { b: { b2: 'china' }, c: 3,}json3 = {  // 合并后的結果 a: 1, b: { b2: 'chila' }, c: 3,}

可以看出,我們的本意是希望json2里的b.b2: 'china'取代json1里的b.b2: 'world', 可是實際上,常規的結果只會把整個object/json取代,而不會去遍歷其中的屬性,在本例中導致了b.b1的丟失。

于是就有了如下幾行代碼:

// 遇到相同元素級屬性,以后者(main)為準// 不返還新Object,而是main改變function mergeJSON (minor, main) { for (var key in minor) {  if (main[key] === undefined) { // 不沖突的,直接賦值   main[key] = minor[key];   continue;  }  // 沖突了,如果是Object,看看有么有不沖突的屬性  // 不是Object 則以main為主,忽略即可。故不需要else  if (isJSON(minor[key])) {   // arguments.callee 遞歸調用,并且與函數名解耦   arguments.callee(minor[key], main[key]);  } }}// 附上工具function isJSON(target) { return typeof target == "object" && target.constructor == Object;}

雖然只有十幾行的代碼,但還是挺實用。粗略的挖掘了一下搜索引擎,好像并沒有更合適解決問題的代碼。簡單的遞歸思想和argument.callee琢磨一下也是有些味道的

PS:這里再為大家推薦幾款相關的json在線工具供大家參考:

在線JSON代碼檢驗、檢驗、美化、格式化工具:
http://tools.VeVB.COm/code/json

JSON在線格式化工具:
http://tools.VeVB.COm/code/jsonformat

在線XML/JSON互相轉換工具:
http://tools.VeVB.COm/code/xmljson

json代碼在線格式化/美化/壓縮/編輯/轉換工具:
http://tools.VeVB.COm/code/jsoncodeformat

在線json壓縮/轉義工具:
http://tools.VeVB.COm/code/json_yasuo_trans

更多關于JavaScript相關內容可查看本站專題:《JavaScript中json操作技巧總結》、《JavaScript查找算法技巧總結》、《JavaScript錯誤與調試技巧總結》、《JavaScript數據結構與算法技巧總結》、《JavaScript遍歷算法與技巧總結》及《JavaScript數學運算用法總結

希望本文所述對大家JavaScript程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 淮阳县| 太原市| 河南省| 安乡县| 桦川县| 西和县| 新巴尔虎左旗| 芦山县| 田林县| 冷水江市| 江源县| 石景山区| 禹州市| 揭阳市| 综艺| 大竹县| 克山县| 乌鲁木齐市| 岳普湖县| 永川市| 芦山县| 舒城县| 香港| 昌图县| 太仆寺旗| 嘉禾县| 建瓯市| 贡嘎县| 分宜县| 安义县| 兖州市| 甘泉县| 元江| 太仓市| 吉林省| 江油市| 当雄县| 澄城县| 武陟县| 内丘县| 新巴尔虎右旗|