javascript - 仅按关键部分对平面数据库中的键值进行分组
问题描述
我从一个平面数据库收到一些数据,如下所示:
[{
key: "user_15478",
value: "xxx"
}, {
key: "user_name_15478",
value: "xxx"
}, {
key: "user_age_15478",
value: 5
}, {
key: "user_24547",
value: "xxx"
}, {
key: "user_name_24547",
value: "xxx"
}, {
key: "user_age_24547",
value: 12
}, {
key: "user_42412",
value: "xxx"
}, {
key: "user_name_42412",
value: "xxx"
}, {
key: "user_age_42412",
value: 42
}
]
什么是更简单的方法,在 vanila js 中或使用像 lodash 这样的库来转换它,按密钥中的数字(15478、24547 等)分组。
例如:
[{
15478: [{
key: "user_15478",
value: "xxx"
}, {
key: "user_name_15478",
value: "xxx"
}, {
key: "user_age_15478",
value: 5
}
]
}, {
24547: [{
key: "user_24547",
value: "xxx"
}, {
key: "user_name_24547",
value: "xxx"
}, {
key: "user_age_24547",
value: 12
}
]
}, {
42412: { {
key: "user_42412",
value: "xxx"
}, {
key: "user_name_42412",
value: "xxx"
}, {
key: "user_age_42412",
value: 42
}
]
}
]
在此先感谢您的帮助。
解决方案
如果您的输入数组未排序,那么您首先需要根据 对其进行排序key
。所以排序后会是这样的:
[{key: "user_15478",
value: "xxx"
},
{key: "user_24547",
value: "xxx"
},
.... //then _age wise
{key: "user_age_42412",
value: "xxx"
},
... //then _name wise
{key: "user_name_42412",
value: "xxx"
},
]
然后简单地继续将对象推到累加器使用reduce
let arr= [ { key: "user_15478", value: "xxx" }, { key: "user_name_15478", value: "xxx" }, { key: "user_age_15478", value: 5 }, { key: "user_24547", value: "xxx" }, { key: "user_name_24547", value: "xxx" }, { key: "user_age_24547", value: 12 }, { key: "user_42412", value: "xxx" }, { key: "user_name_42412", value: "xxx" }, { key: "user_age_42412", value: 42 }, ];
arr = arr.sort((a, b) => a.key > b.key ? 1 : -1)
let result=arr.reduce((acc, val) => {
let field = val.key.split("_")
if (field.length === 2) {
acc[field[1]] = [{ ...val
}]
}
else
acc[field[2]].push(val)
return acc;
}, {})
let wrappedResult=Object.keys(result).map(key=>({[key]:result[key]}))
console.log(wrappedResult)
推荐阅读
- php - 解析具有变形关系的资源类
- protractor - 在量角器中使用页面对象中的函数
- python - 多类意味着ROC计算
- c# - 单元测试和断言结果
- java - Java ClientProtocolException 异常优先级
- reactjs - 如何在 React C3js 中对 X 轴点进行分组?
- python - 来自 pandas 数据框的 plotly 折线图
- winapi - 如何一次将超过 4GB 的数据加载到内存缓冲区中?
- c# - 抽象类和 IModelBinder,如何获得正确的 ValidationState?
- elasticsearch - 没有在 kubernetes 之外获取 kibana gui