首页 > 解决方案 > 将数组转换为哈希图。如何写得更好

问题描述

什么是最好的转换代码

[
   {id : 1, payload : "aaa"},
   {id : 1, payload : "bbb"},
   {id : 2, payload : "ccc"}
]

{  
    "1" : [
        {id : 1, payload : "aaa"},
        {id : 1, payload : "bbb"}
    ],
    "2" : [
        {id : 2, payload : "ccc"}
    ]
]

?

变体

let res = {}
src.forEach(r=>{
    let id = r.id;
    let arr = res[id];
    if (!arr) {
        res[id] = [];
        arr = res[id];
    }
    arr.push(r);
});

简而言之

src.forEach(r=>(res[r.id] || (res[r.id] = [])).push(r));

如何删除一个res[r.id]

我想要类似的东西

src.forEach(r=>(res[r.id] ?= []).push(r));

inb4:写函数

是的,我可以,但它看起来并不美观,而且不仅对这种情况提出质疑。

标签: javascript

解决方案


您可以采取 aMap并为每个相同的 获得相同的组id。最后构建一个新对象。

var data = [{ id: 1, payload: "aaa" }, { id: 1, payload: "bbb" }, { id: 2, payload: "ccc" }],
    result = Object.fromEntries([
        ...data.reduce((m, o) => m.set(o.id, [...(m.get(o.id) || []), o]), new Map)
    ]);

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }


推荐阅读