首页 > 解决方案 > 检查字母表中的字母被用作对象数组中键的起始字母的次数

问题描述

创建一个函数,该函数返回一个包含以下内容的对象数组: {letter: 'A', count: 15} -字母将按字母顺序排列,并且计数是以字母 'A' 开头的国家/地区的计数。

    const countries = [
  {
    name: 'Afghanistan',
    capital: 'Kabul',
    languages: ['Pashto', 'Uzbek', 'Turkmen'],
    population: 27657145,
    flag: 'https://restcountries.eu/data/afg.svg',
    currency: 'Afghan afghani'
  },
  {
    name: 'Åland Islands',
    capital: 'Mariehamn',
    languages: ['Swedish'],
    population: 28875,
    flag: 'https://restcountries.eu/data/ala.svg',
    currency: 'Euro'
  },
  {
    name: 'Albania',
    capital: 'Tirana',
    languages: ['Albanian'],
    population: 2886026,
    flag: 'https://restcountries.eu/data/alb.svg',
    currency: 'Albanian lek'
  } //...this country array reaches up to a country that starts with 'Z'
];

到目前为止,这是我的解决方案:

function alphaCountry() {
    const alphaChar = 'ABCDEFGHIJKLMNOPQRSTUVEWXYZ'
    const finalObj = [];
    let alphaIndexer = 0;

    while (alphaIndexer !== alphaChar.length) {
    const startsWith = countries.filter((obj) => obj.name.startsWith(alphaChar[alphaIndexer]))
    finalObj.push({'letter': alphaChar[alphaIndexer], 'count': startsWith.length + ' times'})
    alphaIndexer++
  }

  return finalObj;
}

有用。有没有更短或更好的方法来执行这个?谢谢!

标签: javascriptfunction

解决方案


您可以使用Array.prototype.reduce()来计算每个字母作为初始字母的出现次数,然后返回正确排序的结果键值对:

const countries = [
  {name: 'Ukraine'},
  {name: 'Bulgaria'},
  {name: 'Cyprus'},
  {name: 'Andorra'},
  {name: 'United Kingdom'},
  {name: 'Canada'}
]


const getStartingLetters = arr => {
  const occurences = arr
    .reduce((acc, {name}) => {
      const startingLetter = name[0]
      acc[startingLetter] = ( acc[startingLetter] || 0 ) + 1
      return acc
    }, {})
  
  return Object
    .keys(occurences)
    .sort()
    .map(letter => ({letter, count: occurences[letter]}))
}


console.log(getStartingLetters(countries))


推荐阅读