我有两个对象,我想通过覆盖相同的值加入一个对象。
var objOne = { current: 1, sort: { 'foo' : 'bar' }, search: [ { name: 'a', value: 1 }, { name: 'b', value: 2 } ] };
var objTwo = { sort: { 'john' : 'doe' }, search: [ { name: 'a', value: 3 } ] };
我尝试了$。extends,没有深层复制,并且适用于数组对象以外的所有元素。
var objAll = $.extend( {}, objOne, objTwo );
objAll -> { current: 1, sort: { 'john' : 'doe' }, search: [{ name: 'a', value: 3 }] };
我的目标是获得此
objAll -> { current: 1, sort: { 'john' : 'doe' }, search: [{ name: 'a', value: 3 },{ name: 'b', value: 2 }] };
仅覆盖具有相同名称的对象数组。
我该怎么做?谢谢
这可以使用ES6代理,使用处理程序中的SET陷阱来完成。
var objOne = { current: 1, sort: { 'foo' : 'bar' }, search: [ { name: 'a', value: 1 }, { name: 'b', value: 2 } ] };
var proxy = new Proxy(objOne, {
set(trapTarget, key, value, receiver) {
// not altering the existing array properties
if (trapTarget.hasOwnProperty(key) && Array.isArray(trapTarget[key])) {
return Reflect.set(trapTarget, key, trapTarget[key], receiver)
}
return Reflect.set(trapTarget, key, value, receiver);
} });
Object.assign(proxy,{ sort: { 'john' : 'doe' }, search: [ { name: 'a', value: 3 } ] });
console.log(objOne);
jsfiddle链接:https://jsfiddle.net/8n3c8hs0/