使用es6将对象的特定支柱合并为一个?

时间:2018-02-14 20:28:07

标签: javascript object merge ecmascript-6 object-properties

这是迄今为止在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];

但这两者合并,我不想要。

5 个答案:

答案 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,
}