什么是最好的转换代码
[
{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:写入功能
是的,我可以,但是看起来不那么美观,不仅仅对这种情况有疑问。
答案 0 :(得分:0)
您可以使用Array.reduce来实现。
const input = [
{id : 1, payload : "aaa"},
{id : 1, payload : "bbb"},
{id : 2, payload : "ccc"}
];
const output = input.reduce((acc, curr) => {
if (acc[curr.id]) {
acc[curr.id].push(curr);
} else {
acc[curr.id] = [curr]
}
return acc;
}, {});
console.log(output);
答案 1 :(得分:0)
您可以使用一个Map
并为每个相同的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; }