兩個json對象對比

var jsonObjA = {
    "Name": "MyName",
    "Company": "MyCompany",
    "Infos": [{
            "Age": "100"
        },
        {
            "Box": [{
                    "Height": "100"
                },
                {
                    "Weight": "200"
                }
            ]
        }
    ],
    "Address": "馬欄山"
}
var jsonObjB = {
    "Name": "MyName",
    "Company": "MyCompany",
    "Infos": [{
            "Age": "100"
        },
        {
            "Box": [{
                    "Height": "100"
                },
                {
                    "Weight": "200"
                }
            ]
        }
    ],
    "Address": "馬欄山二號"
} 
var result = Compare(jsonObjA, jsonObjB);
console.log(result); // true or false

一、判斷是否是對象類型吧碾,是否是數組喂柒,獲取對象長度

function isObj(object) {
    return object && typeof(object) == 'object' && 
           Object.prototype.toString.call(object).toLowerCase() == "[object object]";
}
function isArray(object) {
    return object && typeof(object) == 'object' && object.constructor == Array;
}
function getLength(object) {
    var count = 0;
    for(var i in object) count++;
    return count;
}

二砚嘴、

function Compare(objA, objB) {
    if(!isObj(objA) || !isObj(objB)) return false; //判斷類型是否正確
    if(getLength(objA) != getLength(objB)) return false; //判斷長度是否一致
    return CompareObj(objA, objB, true); //默認為true
}
function CompareObj(objA, objB, flag) {
    for(var key in objA) {
        if(!flag) //跳出整個循環(huán)
            break;
        if(!objB.hasOwnProperty(key)) {
            flag = false;
            break;
        }
        if(!isArray(objA[key])) { //子級不是數組時,比較屬性值
            if(objB[key] != objA[key]) {
                flag = false;
                break;
            }
        } else {
            if(!isArray(objB[key])) {
                flag = false;
                break;
            }
            var oA = objA[key],
                oB = objB[key];
            if(oA.length != oB.length) {
                flag = false;
                break;
            }
            for(var k in oA) {
                if(!flag) //這里跳出循環(huán)是為了不讓遞歸繼續(xù)
                    break;
                flag = CompareObj(oA[k], oB[k], flag);
            }
        }
    }
    return flag;
}

可以使用lodash.js 的isEqual();

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市照瘾,隨后出現的幾起案子匈棘,更是在濱河造成了極大的恐慌,老刑警劉巖析命,帶你破解...
    沈念sama閱讀 221,576評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件主卫,死亡現場離奇詭異,居然都是意外死亡鹃愤,警方通過查閱死者的電腦和手機簇搅,發(fā)現死者居然都...
    沈念sama閱讀 94,515評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來软吐,“玉大人瘩将,你說我怎么就攤上這事“及遥” “怎么了姿现?”我有些...
    開封第一講書人閱讀 168,017評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長肖抱。 經常有香客問我备典,道長,這世上最難降的妖魔是什么意述? 我笑而不...
    開封第一講書人閱讀 59,626評論 1 296
  • 正文 為了忘掉前任提佣,我火速辦了婚禮吮蛹,結果婚禮上,老公的妹妹穿的比我還像新娘拌屏。我一直安慰自己潮针,他們只是感情好,可當我...
    茶點故事閱讀 68,625評論 6 397
  • 文/花漫 我一把揭開白布槐壳。 她就那樣靜靜地躺著然低,像睡著了一般。 火紅的嫁衣襯著肌膚如雪务唐。 梳的紋絲不亂的頭發(fā)上雳攘,一...
    開封第一講書人閱讀 52,255評論 1 308
  • 那天,我揣著相機與錄音枫笛,去河邊找鬼吨灭。 笑死,一個胖子當著我的面吹牛刑巧,可吹牛的內容都是我干的喧兄。 我是一名探鬼主播,決...
    沈念sama閱讀 40,825評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼啊楚,長吁一口氣:“原來是場噩夢啊……” “哼吠冤!你這毒婦竟也來了?” 一聲冷哼從身側響起恭理,我...
    開封第一講書人閱讀 39,729評論 0 276
  • 序言:老撾萬榮一對情侶失蹤拯辙,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后颜价,有當地人在樹林里發(fā)現了一具尸體涯保,經...
    沈念sama閱讀 46,271評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,363評論 3 340
  • 正文 我和宋清朗相戀三年周伦,在試婚紗的時候發(fā)現自己被綠了夕春。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,498評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡专挪,死狀恐怖及志,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情寨腔,我是刑警寧澤困肩,帶...
    沈念sama閱讀 36,183評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站脆侮,受9級特大地震影響锌畸,放射性物質發(fā)生泄漏。R本人自食惡果不足惜靖避,卻給世界環(huán)境...
    茶點故事閱讀 41,867評論 3 333
  • 文/蒙蒙 一潭枣、第九天 我趴在偏房一處隱蔽的房頂上張望比默。 院中可真熱鬧,春花似錦盆犁、人聲如沸命咐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,338評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽醋奠。三九已至,卻和暖如春伊佃,著一層夾襖步出監(jiān)牢的瞬間窜司,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,458評論 1 272
  • 我被黑心中介騙來泰國打工航揉, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留塞祈,地道東北人。 一個月前我還...
    沈念sama閱讀 48,906評論 3 376
  • 正文 我出身青樓帅涂,卻偏偏與公主長得像议薪,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子媳友,可洞房花燭夜當晚...
    茶點故事閱讀 45,507評論 2 359

推薦閱讀更多精彩內容

  • 國家電網公司企業(yè)標準(Q/GDW)- 面向對象的用電信息數據交換協議 - 報批稿:20170802 前言: 排版 ...
    庭說閱讀 11,004評論 6 13
  • 二斯议、數學運算(math)函數2.1算術運算函數2.1.1rand()函數:產生隨機數2.1.2abs()函數/la...
    問題餓閱讀 3,505評論 1 11
  • 你還記得當初是因為什么而開始的嗎? 已經好幾天沒按時寫生活感悟了醇锚,工作忙是一方面捅位,另一方面是我發(fā)現自己開始逃避這件...
    岸遠_水聲微閱讀 234評論 0 0
  • “老師,我想找你做個案搂抒,但太貴了”“老師我生活很緊都沒錢做個案”近期聽到太多這樣的聲音,我會問是因為你生活不...
    貓秘閱讀 564評論 0 0
  • 桌椅分享完歌之后被說動搞事于是】 大概近期最后一發(fā)偽現實向尿扯,之后我就要回到我扯淡歡脫的畫風了orz】 ——----...
    篤柿閱讀 569評論 0 8