欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Javascript實用方法之json合并的場景分析

 更新時間:2022年09月06日 14:20:34   作者:奇想派  
這篇文章主要介紹了Javascript實用方法之json合并,jQuery 的“extend()”方法有兩個原型:合并的方法,分別是淺合并和深度合并,本文通過代碼給大家介紹的非常詳細,需要的朋友可以參考下

場景

2個json合并,

jQuery 的“extend()”方法有兩個原型:合并的方法,分別是淺合并和深度合并,其實淺合并只是json的第一層被合并,而深度合并是全部層數(shù)都被合并,分別如下寫法:

1.淺合并,target被object1...合并,只有一層

$.extend( target [, object1 ] [, objectN ] )
  • 深度合并,target被object1...合并,包含一層二層三層...

    要深度合并, [deep]需要為true, 后面覆蓋前面,所以如要要保留后面的,則需要 object1 =$.extend(true,target,object1) ,但target已經(jīng)變化了

$.extend( [deep ], target, object1 [, objectN ] )

這是jquery自帶的,下面帶大家看看javascript如何實現(xiàn)。

代碼

1.深度合并(遞歸)

/**
* 遇到相同元素級屬性,以(minor)為準(zhǔn) // 不返還新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)為準(zhǔn)為主,
        //console.log(key)
        if(isJSON(minor[key])||isArray(minor[key])) { // arguments.callee 遞歸調(diào)用,并且與函數(shù)名解耦 
            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);

到此這篇關(guān)于Javascript實用方法之json合并的文章就介紹到這了,更多相關(guān)js json合并內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論