1

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

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

4

5 回答 5

2
 const result = (({name, type}, {age, dob}) => ({name, type, age, dob}))(P1, P2);

只需部分破坏 P1 和 P2 并构建一个新对象。

于 2018-02-14T20:34:21.827 回答
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 };
于 2018-02-14T20:37:09.613 回答
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);

于 2018-02-14T20:52:58.173 回答
1

我想你最好的选择是打开包装然后重新包装:

let {name, type, age, dob} = {...P1, ...E1};
result = {name, type, age, dob}

这很愚蠢,但这就是我们在 ES6 中所拥有的一切。

另一种方法是像 lodash's 之类的函数_.pick

如果您有一个源对象数组,请替换{...P1, ...E1}为 spreaded Object.assign

let {name, type, age, dob} = Object.assign({}, ...a);
于 2018-02-14T20:56:46.733 回答
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,
}
于 2018-02-14T20:32:21.120 回答