условно скопировать объект с помощью ES6 - PullRequest
0 голосов
/ 19 декабря 2018

Допустим, у меня есть следующие два объекта

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]
}

Примечание * Я сохранил CustomerData объекта1 и неobject2, так как для object2 отсутствует customerId.

Я собираюсь использовать оператор распространения 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

1 Ответ

0 голосов
/ 21 декабря 2018
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}
...