首页 > 解决方案 > 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值的第一个字母上过滤每个...但我想知道是否有一个标准和高性能的方法来实现这个?

标签: javascript

解决方案


使用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)


推荐阅读