可以说我有以下两个对象
object1: {
CustomerId: 1,
CustomerData: [1,2,3,4]
}
object2: {
CustomerId: 2,
CustomerData: [11,22,33,44]
CustomerOrders: [5,6,7,8]
}
现在我需要使用以下业务逻辑合并两个对象
如果任何一个对象都包含一个CustomerId,则该对象应覆盖另一个对象的属性。例如,如果两个对象是
object1: {
CustomerId: 1,
CustomerData: [1,2,3,4]
}
object2: {
CustomerData: [11,22,33,44]
CustomerOrders: [5,6,7,8]
}
由于object2不包含CustomerId,因此最终合并的对象应如下所示
mergedObject: {
CustomerId: 1,
CustomerData: [1,2,3,4],
CustomerOrders: [5,6,7,8]
}
注意*由于对象2缺少customerId,因此我保留了对象1而不是对象2的CustomerData。
我正在寻找使用ES6传播算子来实现这一目标。所以我会用这样的东西
const mergedObject = {...val1, ...val2}
我的问题是{}中的第一位是确定哪个对象包含customerId。目前,我有一个if条件,该条件检查是否在对象中找到了customerId,然后将其分配给object2,因为这将覆盖另一个对象。所以我有这样的东西
if (object1.customerId){
val2 = object1;
val1 = object2;
} else if (object2.customerId){
val2 = object2;
val1 = object1;
}
这是很长的时间,我认为这很丑陋,在扩展/构造函数运算符本身中,还有更好的方法吗?
const mergedObject = {...val1, ...val2} //Do it here itself
答案 0 :(得分:1)
let mergedObject;
if (object1.customerId) {
// Consider that even if both have customerId object1 override object2
// You might want to check if (object1.customerId && !object2.customerId)
mergedObject = {...object2, ...object1}
}
else {
// Event if both have customerId object 2 will override object 1
mergedObject = {...object1, ...object2}
}
// or with Ternary:
let mergedObject = object1.customerId ? {...object2, ...object1} : {...object1, ...object2}