eightHundreds
3/10/2017 - 12:53 PM

递归的更新json对象,注意这里对数据是采用相加的操作

递归的更新json对象,注意这里对数据是采用相加的操作

 Object.map = function (obj, f) {
        var result = {};
        for (k in obj)
            if ({}.hasOwnProperty.call(obj, k))
                result[k] = f(k, obj[k]);
        return result;
    }
    function merge(a, b, resolve) {
        return Object.map(a, function (k, a_value) {
            if (k in b)
                return resolve(a_value, b[k]);
            else
                return a_value;
        });
    }
    function recursive_merge(a, b, resolve) {
        return merge(a, b, function (a_value, b_value) {
            if (typeof a_value == 'object' && typeof b_value == 'object')
                return recursive_merge(a_value, b_value, resolve);
            else
                return resolve(a_value, b_value);
        });
    }

    result = recursive_merge(initial, update, function (a, b) {
        return a + b;
    })