这是迄今为止在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];
。
但这两者合并,我不想要。
答案 0 :(得分:2)
const result = (({name, type}, {age, dob}) => ({name, type, age, dob}))(P1, P2);
只是部分破坏P1和P2并建立一个新对象。
答案 1 :(得分:1)
既然你正在寻找一种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 };
答案 2 :(得分:1)
您可以使用完整的动态方法,为所需属性使用数组,为对象使用另一个数组。
然后从找到的对象中构建一个新对象。
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);
答案 3 :(得分:1)
我猜你最好的办法是打开包装然后再打包:
let {name, type, age, dob} = {...P1, ...E1};
result = {name, type, age, dob}
这很愚蠢,但这就是我们在ES6中所拥有的一切。
替代方案是像lodash的_.pick
。
如果您有一个源对象数组,请将{...P1, ...E1}
替换为带有扩展的Object.assign
:
let {name, type, age, dob} = Object.assign({}, ...a);
答案 4 :(得分:0)
如果您知道合并对象应具有哪些属性(在您的情况下为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,
}