javascript - Javascript按字母顺序排列的对象键排序
问题描述
我想知道,我有以下数据结构:
data = [
{
name: 'Alpha',
},
{
name: 'Alfa',
},
{
name: 'Bravo',
},
{
name: 'Brafo',
},
{
name: 'Charlie',
},
{
name: 'Charly',
},
...
{
name: 'Zulu',
},
{
name: 'Zulo',
},
]
我希望字母表中的每个字母至少有一个,通常是更多。但是,如果没有一个 data.name 我仍然希望在下面的数据结构中有一个空的 domain array []
。
我想知道,如何将其操纵为以下数据结构:
data = {
a: {
domains: [
{
name: 'Alpha',
},
{
name: 'Alfa',
},
],
},
b: {
domains: [
...
]
},
...
z: {
domains: [
...
]
},
};
我使用了一些方法,其中涉及一个预先构建的“alphbetised” key = object 数组,然后在data.name
值的第一个字母上过滤每个...但我想知道是否有一个标准和高性能的方法来实现这个?
解决方案
使用reduce()
const data = [{name:"Alpha"},{name:"Alfa"},{name:"Bravo"},{name:"Brafo"},{name:"Charlie"},{name:"Charly"},{name:"Zulu"},{name:"Zulo"}]
const res = data.reduce((a, v) => {
// prepare key
let key = v.name.substring(0,1).toLowerCase()
// check key in accumulator
if (!a[key]) {
// assign domain object
a[key] = {domains: []}
}
// push domain array
a[key].domains.push(v)
return a
}, {})
console.log(res)
推荐阅读
- python - DRF 将数据从 API 反序列化到 django 模型
- .net - Web API.Net 响应类型和序列化
- javascript - 带有 'as' 属性的通用 React TypeScript 组件(能够渲染任何有效的 dom 节点)
- mongodb - find({}) doesn't return correct result
- python-3.x - how to check an array for inputs that are outside a condition more then once
- python - 在 Pytorch 中将 L1 损失稍微调整为加权 L1 损失,梯度计算仍然可以正常工作吗?
- postgresql - How to disable subscription automatically on connexion lost (PostgreSQL Logical Replication)?
- c# - 相当于修改 EFCore 迁移
- linkedin - Items missing from LinkedIn API
- r - 将简单的 data.table 转换为命名向量