Javascript 如何在jQuery中使用$.extend()将对象与所有唯一值合并

Javascript 如何在jQuery中使用$.extend()将对象与所有唯一值合并,javascript,jquery,object,Javascript,Jquery,Object,我试图将三个对象合并到一个新对象中,但它覆盖了重复的值。有人能帮我解决如何将所有对象合并到一个不同的对象中,而不更改现有对象并包含所有唯一的值 var object1 = { red: 0, blue: { lightblue: 24, darkblue: 12 }, black: 17 }; var object2 = { white: 200, blue: { lightblue: 40 } }; var object3 ={ yellow: 234 }; var

我试图将三个对象合并到一个新对象中,但它覆盖了重复的值。有人能帮我解决如何将所有对象合并到一个不同的对象中,而不更改现有对象并包含所有唯一的值

var object1 = {
  red: 0,
  blue: { lightblue: 24, darkblue: 12 },
  black: 17
};
var object2 = {
  white: 200,
  blue: { lightblue: 40 }
};
var object3 ={
  yellow: 234
};

var targetresult = $.extend({}, object1, object2, object3);
console.log(targetresult);

我认为您在这个问题上使用了错误的数据结构。JavaScript中的对象的所有属性都应该具有唯一的名称。这就是为什么合并两个对象时,同名的属性会被覆盖

对于这种情况,我建议使用数组作为主数据结构。可以在不覆盖元素的情况下继续向数组中添加元素。然后,您可以将数组与Array#concat方法组合

var array1 = 
[
{red: 0},
{blue: { lightblue: 24, darkblue: 12 }},
{black: 17}
];

var array2 = 
[
{white: 200},
{blue: { lightblue: 40 }}
];

var array3 =
[
{yellow: 234}
];

var targetResult = array1.concat(array2, array3);
console.log(targetResult);

在上面的代码中,我使每个元素都成为
{name:value}
对象。使用
[name,value]
数组作为数组元素也是可以接受的。

可能使用
对象。分配(to,from)
?我也尝试过这个方法,但它也会重载第二个对象值并删除重复的对象,然后尝试
$.merge(arr1,arr2)
数组1.concat(array2,array3,…,arrayX)
亲爱的先生,我说的是object,但如果我使用像'var object1={red:0,blue:{lightblue:24,darkblue:12},black:17},您回答的是数组@EvgenyKolyakovno-sir;var object2={white:200,blue:{lightblue:40}};$。扩展(true、object1、object2);console.log(object1);'然后它给出了完美的结果,它同时包含blue对象的值:lightblue和darkblue,但覆盖了lightblue的值,因为它也在object2中,我只是在寻找解决方案,将合并对象分配给新对象,而不更改现有对象。您所要求的是不可能的。不能在具有相同属性名称的对象上具有多个属性。也许您希望在属性已经存在时重命名该属性,以避免在将其添加到组合对象时覆盖该属性?先生,我希望保留该对象的所有属性,但如果存在任何覆盖属性,则应使用最近的属性覆盖该属性