Ecmascript 6 使用ES6有条件地复制对象

Ecmascript 6 使用ES6有条件地复制对象,ecmascript-6,spread-syntax,Ecmascript 6,Spread Syntax,假设我有以下两个对象 object1: { CustomerId: 1, CustomerData: [1,2,3,4] } object2: { CustomerId: 2, CustomerData: [11,22,33,44] CustomerOrders: [5,6,7,8] } 现在,我需要使用以下业务逻辑合并这两个对象 如果任一对象包含CustomerId,则该ID应覆盖另一个对象的属性。例如,如果两个对象是 object1: { Custo

假设我有以下两个对象

object1: {
   CustomerId: 1,
   CustomerData: [1,2,3,4]
}

object2: { 
   CustomerId: 2,
   CustomerData: [11,22,33,44]
   CustomerOrders: [5,6,7,8]
}
现在,我需要使用以下业务逻辑合并这两个对象

如果任一对象包含CustomerId,则该ID应覆盖另一个对象的属性。例如,如果两个对象是

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]
}
注意*我保留了object1的CustomerData,而不是object2,因为object2缺少customerId

我希望使用ES6 spread操作符来实现这一点。所以我会用这样的东西

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

那么,
const mergedObject=object1.customerId?{…object1,…object2}:{…object2,…object1}
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}