合并简单对象中的重复键



如何在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"}
]

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);

如果您创建如下对象 -

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

JavaScript 引擎将按如下方式转换它 -

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

所以你无法实现你提到的。

最新更新