合并简单对象中的重复键

时间:2019-01-25 09:43:01

标签: javascript arrays node.js json object

我如何合并JS对象中的重复键。


输入:

{
 a: "1",
 b: "2",
 c: "3",
 c: "4",
 d: "5"
}

输出:

{
 a: "1",
 b: "2",
 c: ["3", "4"],
 d: "5"
}

更新

如果该对象不存在,我将采用Sublime并手动对其进行更改。现在可以创建一个新对象并合并键了吗?


输入:

[
 {a: "1"},
 {b: "2"},
 {c: "3"},
 {c: "4"},
 {d: "5"}
]

输出:

[
 {a: "1"},
 {b: "2"},
 {c: ["3", "4"]},
 {d: "5"}
]

2 个答案:

答案 0 :(得分:3)

  

一个javascript对象不能有重复的键,因此这是行不通的。

相反,如果您有一个包含一个或多个键的对象数组,并且想要合并所有对象以获取目标结构,那么下面是一个示例:

const arr = [
  { a: "1", b: "3" },
  { b: "2" },
  { c: "3", d: "4" },
  { c: "4" },
  { d: "5" }
];

const merged = arr.reduce((accum, obj) => {
  for (key in obj) {
    accum[key] = accum[key] ? [...accum[key], obj[key]] : obj[key];
  }
  return accum;
}, { });

console.log(merged);

答案 1 :(得分:2)

如果您按如下所述创建类似您提到的对象-

{
  a: "1",
  b: "2",
  c: "3",
  c: "4",
  d: "5"
}

JavaScript引擎将其转换如下-

{
  a: "1",
  b: "2",
  c: "4",
  d: "5"
}

因此您无法实现您提到的内容。

谢谢 希望它能帮助您理解JavaScript对象