javascript - 将数组转换为哈希图。如何写得更好
问题描述
什么是最好的转换代码
[
{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:写函数
是的,我可以,但它看起来并不美观,而且不仅对这种情况提出质疑。
解决方案
您可以采取 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; }
推荐阅读
- javascript - 我想显示输入文件名而不是完整路径
- execution - GraphDB free 不能在 Windows 10 上运行
- java - 有没有办法减少多个类型参数?
- node.js - jsondiffpatch nodejs中的字符串差异
- javascript - 我怎样才能切换动态克隆或生成的“复选框”?
- jquery - 达到 maxlength 错误时将焦点移到 keyup 上
- c# - C# Directory EnumerateFiles:掩码“*.*”和“*”的区别?
- ios - Xamarin PCL 项目 - 我的 iOS 应用程序未在 iOS 12.1 及更低版本中启动..它在 12.1 及更高版本中运行良好,直到最新的 13.2
- java - 在 kotlin 中创建 Lambda 函数
- android - 我可以在大型项目中使用 SVG 而不是 PNG