通过字母将对象数组转换为字典

Chr*_* H. 1 javascript

我有一个看起来像这样的对象数组:

let stuff = [
  {
    "id": "48202847",
    "name": "Doe"
  },
  {
    "id": "17508",
    "name": "Marie"
  },
  {
    "id": "175796",
    "name": "Robert"
  },
  {
    "id": "175796",
    "name": "Ronald"
  },
]
Run Code Online (Sandbox Code Playgroud)

我想要得到的是一本看起来像这样的字典:

{
  "D": [{"id": "48202847", "name": "Doe"}],
  "M": [{"id": "17508", "name": "Marie"}],
  "R": [{"id": "175796", "name": "Robert"}, {"id": "175796", "name": "Ronald"}]
}
Run Code Online (Sandbox Code Playgroud)

请注意,如何将所有以“ R”开头的人列出在一个键下。

这是我的功能,用于创建以该人的姓名为键的字典:

const byId = (array) =>
  array.reduce((obj, item) => {
    obj[item.name] = item
    return obj
  }, {})
Run Code Online (Sandbox Code Playgroud)

但这显然不能满足我的要求。我确实对如何实现这一目标有一些想法,但是它们是非常古老的,我很想知道如何正确地做到这一点。任何帮助表示赞赏!

Nin*_*olz 5

您需要第一个字符,大写字母和一个用于收集对象的数组。

const byId = array =>
    array.reduce((obj, item) => {
        var key = item.name[0].toUpperCase(); // take first character, uppercase
        obj[key] = obj[key] || [];            // create array if not exists
        obj[key].push(item);                  // push item
        return obj
    }, {});

let stuff = [{ id: "48202847", name: "Doe" }, { id: "17508", name: "Marie" }, { id: "175796", name: "Robert" }, { id: "175796", name: "Ronald" }],
    result = byId(stuff)
  
console.log(result);
Run Code Online (Sandbox Code Playgroud)