【问题标题】:How to Merge objects using $.extend() in jQuery with all unique values如何在 jQuery 中使用 $.extend() 合并具有所有唯一值的对象
【发布时间】:2017-06-27 17:59:03
【问题描述】:

我正在尝试将三个对象合并到一个新对象中,但它会覆盖重复值,任何人都可以帮助我解决如何将所有对象合并到一个不同的对象中而不更改现有对象并包含所有唯一值。

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

【问题讨论】:

  • 也许使用Object.assign(to, from) ?
  • 我也试过这个,但它也重载了第二个对象值并删除了重复的对象
  • 然后试试$.merge(arr1, arr2)
  • array1.concat(array2, array3, ..., arrayX)
  • 亲爱的先生,我在谈论对象,但您正在回复数组@EvgenyKolyakov

标签: javascript jquery object


【解决方案1】:

我认为您为这个问题使用了错误的数据结构。 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] 数组作为数组元素。

【讨论】:

  • 不,先生,如果我使用类似' var object1 = { red: 0, blue: { lightblue: 24, darkblue: 12 }, black: 17 }; var object2 = {白色:200,蓝色:{浅蓝色:40}}; $.extend(true, object1, object2);控制台.log(object1); ' 然后它给出了完美的结果,它包含蓝色对象的两个值:浅蓝色和深蓝色,但覆盖了浅蓝色的值,因为它也在 object2 中,我只是在寻找将合并对象分配给新对象的解决方案,没有现有对象的变化
  • 你所要求的是不可能的。您不能在具有相同属性名称的对象上拥有多个属性。也许您想在属性已经存在时对其进行重命名,以避免在将属性添加到组合对象时覆盖该属性?
  • 先生,我想保留对象的所有属性,但如果有任何覆盖属性,那么它应该用最近的属性覆盖
猜你喜欢
  • 1970-01-01
  • 2015-12-05
  • 1970-01-01
  • 2018-08-10
  • 2022-01-13
  • 2018-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多