Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/410.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将现有元素与jQuery.extend合并_Javascript_Jquery_Json - Fatal编程技术网

Javascript 将现有元素与jQuery.extend合并

Javascript 将现有元素与jQuery.extend合并,javascript,jquery,json,Javascript,Jquery,Json,有助于以如下方式合并对象: var a = { 'x': 2, 'y': 3, 'etc': { 'm': 3, 'n': 5 } }; var b = { 'x': 4, 'z': 1, 'etc': { 'm': 2, 'p': 3 } }; $.extend(true, a, b); // true for recursively merge /* Result

有助于以如下方式合并对象:

var a = {
    'x': 2,
    'y': 3,
    'etc': {
        'm': 3,
        'n': 5
    }
};
var b = {
    'x': 4,
    'z': 1,
    'etc': {
        'm': 2,
        'p': 3
    }
};

$.extend(true, a, b); // true for recursively merge
/* Result:
    a = {
        'x': 4,
        'y': 3,
        'z': 1,
        'etc': {
            'm': 2,
            'n': 5,
            'p': 5
        }
    };
*/
但是我感兴趣的只是
a
中已经存在的属性,这意味着,例如,如果
z
不是
a
的属性,那么它不应该出现在结果中。因此,预期结果应该是:

a = {
    'x': 4,
    'y': 3,
    'etc': {
         'm': 2,
         'n': 5,
     }
};
我想知道使用jQuery是否有一种简单的方法来实现这一点,或者只能使用像这样的蛮力来实现(在
a
最多有2层的情况下):


演示:我不知道有这样一个函数,但我编写了一个通用函数,可以合并任意层数的两个对象(散列)

//The function
function leftMerge(a, b) {
    for (var i in b) {
        if (a.hasOwnProperty(i)) {
            console.log(typeof a[i]);
            if (typeof a[i] == 'object' && typeof b[i]== 'object')
                leftMerge(a[i], b[i]);
            else
                a[i] = b[i]
        }
    }
}

// a test
var obj_a = {
    'x': 2,
    'y': 3,
    'etc': {
        'm': 3,
        'n': 5,
        'j': {
            'h': 15,
            'i':16
        }
    }
};
var obj_b = {
    'x': 4,
    'z': 1,
    'etc': {
        'm': 2,
        'p': 3,
        'j': {
            'i':2,
            'l':22
        }
    }
};

leftMerge(obj_a, obj_b);
console.log(obj_a);

我希望这能有所帮助。

所以你有点要求进行
左合并
!这似乎就是你想要的:
//The function
function leftMerge(a, b) {
    for (var i in b) {
        if (a.hasOwnProperty(i)) {
            console.log(typeof a[i]);
            if (typeof a[i] == 'object' && typeof b[i]== 'object')
                leftMerge(a[i], b[i]);
            else
                a[i] = b[i]
        }
    }
}

// a test
var obj_a = {
    'x': 2,
    'y': 3,
    'etc': {
        'm': 3,
        'n': 5,
        'j': {
            'h': 15,
            'i':16
        }
    }
};
var obj_b = {
    'x': 4,
    'z': 1,
    'etc': {
        'm': 2,
        'p': 3,
        'j': {
            'i':2,
            'l':22
        }
    }
};

leftMerge(obj_a, obj_b);
console.log(obj_a);