Javascript 扩展两个对象,不进行深度复制,但不覆盖对象数组

Javascript 扩展两个对象,不进行深度复制,但不覆盖对象数组,javascript,jquery,Javascript,Jquery,我有两个对象,我想通过覆盖相同的值加入其中一个 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 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 trap来完成

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); 

jsiddle-Link:

这可以使用ES6代理,在处理程序中使用set-trap来完成

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); 

jsFIDLE Link:

使用2个foreach创建一个对象您如何知道,在数组中更新哪一个?最后一个覆盖上一个(如$extend)使用2个foreach创建一个对象您如何知道,在数组中更新哪一个?不幸的是,最后一个覆盖上一个(如$extend)适用于排序对象,但不适用于数组搜索。事实上,它返回搜索:[{name:'a',value:1},{name:'b',value:2}],而不返回搜索:[{name:'a',value:3},{name:'b',value:2}]不幸的是,它适用于排序对象,但不适用于数组搜索。实际上,它返回搜索:[{name:'a',value:1},{name:'b',value:2}],而不返回搜索:[{name:'a',value:3},{name:'b',value:2}]