繁体   English   中英

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

[英]Extend two objects with no deep copy but without overwrite array of objects

我有两个对象,我想通过覆盖相同的值来加入一个对象。

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

JsFiddle链接: https ://jsfiddle.net/8n3c8hs0/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM