Это, безусловно, самый распространенный вопрос, заданный в SO, однако, в целом, задаваемые вопросы относятся к объединению двух целых объектов.
В моем случае это совсем другое.
Предположим, мне дали:
const P1 = {
"name" : "Person1",
"profession" : "Student",
"gender" : "Male",
"type" : "Patient",
}
const E1 = {
"age" : "30",
"dob" : "20/12/1970",
"address" : "122 Harrow Street",
"contactNumber" : "07473033312",
}
и я хочу объединить эти два, чтобы дать мне следующее:
const Result = {
"name" : "Person1",
"type" : "Patient",
"age" : "30",
"dob" : "20/12/1970",
}
Проблема в том, что я не хочу объединять два целых проекта. Я хочу объединить определенные реквизиты без циклов.
В настоящее время мы можем достичь слияния, используя распространение следующим образом:
const data = [...P1,...E1];
,
Но это объединяет оба, чего я не хочу.
const result = (({name, type}, {age, dob}) => ({name, type, age, dob}))(P1, P2);
Просто частично уничтожьте P1 и P2 и создайте новый объект.
Вы можете использовать полный динамический подход, используя массив для требуемых свойств, а другой для объектов.
Затем создайте новый объект из найденных объектов.
var p1 = { name: "Person1", profession:"Student", gender:"Male", type:"Patient" },
e1 = { age: "30", dob:"20/12/1970", address:"122 Harrow Street", contactNumber:"07473033312" },
keys = ['name', 'profession', 'age', 'dob'],
objects = [p1, e1],
merged = Object.assign(...keys.map(k => ({ [k]: objects.find(o => k in o)[k] })));
console.log(merged);
Поскольку вы ищете способ ES6, я бы сказал, что использование деконструкции - это путь:
const P1 = {
"name" : "Person1",
"profession" : "Student",
"gender" : "Male",
"type" : "Patient",
}
const E1 = {
"age" : "30",
"dob" : "20/12/1970",
"address" : "122 Harrow Street",
"contactNumber" : "07473033312",
}
const { name, type } = P1;
const { age, dob } = E2;
const Result = { name, type, age, dob };
Если вы знаете, какие свойства должен иметь объединенный объект (в вашем случае name, type, age, dob
)
Как определить их так:
const P1 = {
"name" : "Person1",
"profession" : "Student",
"gender" : "Male",
"type" : "Patient",
}
const E1 = {
"age" : "30",
"dob" : "20/12/1970",
"address" : "122 Harrow Street",
"contactNumber" : "07473033312",
}
const Result = {
"name" : P1.name || E1.name,
"type" : P1.type || E1.type,
"age" : P1.age || E1.age,
"dob" : P1.dob || E1.dob,
}