Javascript实用方法之json合并的场景分析

2022-09-07 15:58:29

场景

2个json合并,

jQuery>

1.浅合并,target被object1...合并,只有一层

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

    深度合并,target被object1...合并,包含一层二层三层...

    要深度合并, [deep]需要为true, 后面覆盖前面,所以如要要保留后面的,则需要 object1 =$.extend(true,target,object1) ,但target已经变化了

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

    这是jquery自带的,下面带大家看看javascript如何实现。

    代码

    1.深度合并(递归)

    /**
    * 遇到相同元素级属性,以(minor)为准 // 不返还新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)为准为主,
            //console.log(key)
            if(isJSON(minor[key])||isArray(minor[key])) { // arguments.callee 递归调用,并且与函数名解耦 
                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);

    到此这篇关于Javascript实用方法之json合并的文章就介绍到这了,更多相关js json合并内容请搜索易采站长站以前的文章或继续浏览下面的相关文章希望大家以后多多支持易采站长站!