javascript - 检查字母表中的字母被用作对象数组中键的起始字母的次数
问题描述
创建一个函数,该函数返回一个包含以下内容的对象数组: {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;
}
有用。有没有更短或更好的方法来执行这个?谢谢!
解决方案
您可以使用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))
推荐阅读
- java - Spring RestTemplate 调用读取超时
- amazon-web-services - 如何从 Glue Dynamic Dataframe 中提取列名和数据类型?
- r - 在另一列上替换一个列条件中的值:R
- python - subprocess.run 在参数中嵌入空字节
- strapi - 内容类型修改后清理 API
- c# - MongoDB Driver C#:嵌套对象中的等效“包含”?
- sql - 为什么我的 DB2 Create Table w/ Foreign Key 失败?
- javascript - 我的代码中的函数没有被命中。Chrome 调试器在选择时显示灰色突出显示,而不是通常的红色。知道是什么导致了这个问题吗?
- javascript - Add/Remove all classes except class on current event
- c# - 使用 Ignite 瘦客户端实现 SessionStateStoreProvider