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

JavaScript實(shí)現(xiàn)JSON合并操作示例【遞歸深度合并】

 更新時(shí)間:2018年09月07日 16:48:29   作者:黃努努  
這篇文章主要介紹了JavaScript實(shí)現(xiàn)JSON合并操作,結(jié)合實(shí)例形式分析了javascript基于遞歸深度實(shí)現(xiàn)json合并操作相關(guān)實(shí)現(xiàn)技巧與注意事項(xiàng),需要的朋友可以參考下

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

為什么我會(huì)想到寫這幾行代碼

在實(shí)際工作中,我們會(huì)使用許多或自主開(kāi)發(fā)或第三方的工具,有些工具的配置文件相當(dāng)細(xì)節(jié),使用頻率低倒也罷了,使用頻率高的話必然造成很多代碼冗余。所以我都會(huì)對(duì)這些工具做二次封裝,把不經(jīng)常改動(dòng)的配置給予默認(rèn)值。如果需要改動(dòng),傳入新的配置覆蓋原來(lái)的配置即可。

起初我以為這是一項(xiàng)很簡(jiǎn)單的需求

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

如上述,確實(shí)很簡(jiǎn)單??墒聦?shí)是,當(dāng)配置不再是僅僅一層嵌套時(shí),常用的合并如$.extendfor in 賦值就不再能再解決問(wèn)題了

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

可以看出,我們的本意是希望json2里的b.b2: 'china'取代json1里的b.b2: 'world', 可是實(shí)際上,常規(guī)的結(jié)果只會(huì)把整個(gè)object/json取代,而不會(huì)去遍歷其中的屬性,在本例中導(dǎo)致了b.b1的丟失。

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

// 遇到相同元素級(jí)屬性,以后者(main)為準(zhǔn)
// 不返還新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 遞歸調(diào)用,并且與函數(shù)名解耦
   arguments.callee(minor[key], main[key]);
  }
 }
}
// 附上工具
function isJSON(target) {
 return typeof target == "object" && target.constructor == Object;
}

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

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

在線JSON代碼檢驗(yàn)、檢驗(yàn)、美化、格式化工具:
http://tools.jb51.net/code/json

JSON在線格式化工具:
http://tools.jb51.net/code/jsonformat

在線XML/JSON互相轉(zhuǎn)換工具:
http://tools.jb51.net/code/xmljson

json代碼在線格式化/美化/壓縮/編輯/轉(zhuǎn)換工具:
http://tools.jb51.net/code/jsoncodeformat

在線json壓縮/轉(zhuǎn)義工具:
http://tools.jb51.net/code/json_yasuo_trans

更多關(guān)于JavaScript相關(guān)內(nèi)容可查看本站專題:《JavaScript中json操作技巧總結(jié)》、《JavaScript查找算法技巧總結(jié)》、《JavaScript錯(cuò)誤與調(diào)試技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》及《JavaScript數(shù)學(xué)運(yùn)算用法總結(jié)

希望本文所述對(duì)大家JavaScript程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • php基于redis處理session的方法

    php基于redis處理session的方法

    這篇文章主要介紹了php基于redis處理session的方法的相關(guān)資料,需要的朋友可以參考下
    2016-03-03
  • JavaScript中使用stopPropagation函數(shù)停止事件傳播例子

    JavaScript中使用stopPropagation函數(shù)停止事件傳播例子

    這篇文章主要介紹了JavaScript中使用stopPropagation函數(shù)停止事件傳播例子,即阻止事件冒泡的一個(gè)方法,需要的朋友可以參考下
    2014-08-08
  • JS返回頂部實(shí)例代碼

    JS返回頂部實(shí)例代碼

    這篇文章主要為大家詳細(xì)介紹了JS返回頂部實(shí)例代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • 利用JavaScript在網(wǎng)頁(yè)實(shí)現(xiàn)八數(shù)碼啟發(fā)式A*算法動(dòng)畫效果

    利用JavaScript在網(wǎng)頁(yè)實(shí)現(xiàn)八數(shù)碼啟發(fā)式A*算法動(dòng)畫效果

    這篇文章主要介紹了利用JavaScript在網(wǎng)頁(yè)實(shí)現(xiàn)八數(shù)碼啟發(fā)式A*算法動(dòng)畫效果,需要的朋友可以參考下
    2017-04-04
  • 微信小程序如何實(shí)現(xiàn)五星評(píng)價(jià)功能

    微信小程序如何實(shí)現(xiàn)五星評(píng)價(jià)功能

    這篇文章主要介紹了微信小程序如何實(shí)現(xiàn)五星評(píng)價(jià)功能,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • 一文詳解DOM的概念和常用操作

    一文詳解DOM的概念和常用操作

    本文詳細(xì)介紹了DOM的概念和常用操作,文檔對(duì)象模型 (DOM) 是 HTML 和 XML 文檔的編程接口。它提供了對(duì)文檔的結(jié)構(gòu)化的表述,并定義了一種方式可以使從程序中對(duì)該結(jié)構(gòu)進(jìn)行訪問(wèn),從而改變文檔的結(jié)構(gòu),樣式和內(nèi)容,感興趣的朋友可以參考閱讀本文
    2023-04-04
  • js逆向解密之網(wǎng)絡(luò)爬蟲(chóng)

    js逆向解密之網(wǎng)絡(luò)爬蟲(chóng)

    在本篇內(nèi)容里小編給大家整理的是關(guān)于js逆向解密之網(wǎng)絡(luò)爬蟲(chóng)的相關(guān)知識(shí)點(diǎn)內(nèi)容,需要的朋友們參考下。
    2019-05-05
  • JS?連接MQTT的使用方法

    JS?連接MQTT的使用方法

    這篇文章主要介紹了JS?連接MQTT的使用方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-01-01
  • 自定義函數(shù)實(shí)現(xiàn)IE7與IE8不兼容js中trim函數(shù)的問(wèn)題

    自定義函數(shù)實(shí)現(xiàn)IE7與IE8不兼容js中trim函數(shù)的問(wèn)題

    這篇文章主要介紹了自定義函數(shù)實(shí)現(xiàn)IE7與IE8不兼容js中trim函數(shù)的方法,涉及trim函數(shù)的重寫與正則匹配的技巧,需要的朋友可以參考下
    2015-02-02
  • js實(shí)現(xiàn)京東快遞單號(hào)查詢

    js實(shí)現(xiàn)京東快遞單號(hào)查詢

    這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)京東快遞單號(hào)查詢,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-07-07

最新評(píng)論

大同县| 怀柔区| 社会| 台中市| 库尔勒市| 汝城县| 张家口市| 嘉鱼县| 深圳市| 三穗县| 定结县| 泰兴市| 玉龙| 米林县| 泽库县| 丰顺县| 年辖:市辖区| 云林县| 绍兴市| 聊城市| 康平县| 呈贡县| 东宁县| 始兴县| 东城区| 青川县| 建始县| 乌鲁木齐县| 成武县| 富顺县| 榆树市| 同江市| 洛宁县| 环江| 屏边| 万源市| 观塘区| 尖扎县| 长海县| 眉山市| 德保县|