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

首頁(yè) > 語(yǔ)言 > JavaScript > 正文

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

2024-05-06 15:30:22
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

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

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

在實(shí)際工作中,我們會(huì)使用許多或自主開(kāi)發(fā)或第三方的工具,有些工具的配置文件相當(dāng)細(xì)節(jié),使用頻率低倒也罷了,使用頻率高的話(huà)必然造成很多代碼冗余。所以我都會(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在線(xiàn)工具供大家參考:

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

JSON在線(xiàn)格式化工具:
http://tools.Vevb.com/code/jsonformat

在線(xiàn)XML/JSON互相轉(zhuǎn)換工具:
http://tools.Vevb.com/code/xmljson

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

在線(xiàn)json壓縮/轉(zhuǎn)義工具:
http://tools.Vevb.com/code/json_yasuo_trans

更多關(guān)于JavaScript相關(guān)內(nèi)容可查看本站專(zhuān)題:《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é)》

發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 馆陶县| 浦城县| 巴马| 平原县| 巨野县| 鄂州市| 铁力市| 正蓝旗| 岑巩县| 普兰县| 南雄市| 深州市| 思茅市| 肇东市| 甘孜县| 军事| 雅安市| 石泉县| 山丹县| 宜章县| 双柏县| 墨江| 和田县| 昭觉县| 二连浩特市| 原平市| 略阳县| 来宾市| 太仆寺旗| 稷山县| 孟州市| 任丘市| 新巴尔虎左旗| 卢湾区| 德令哈市| 宜兰市| 读书| 探索| 随州市| 泰州市| 抚顺市|