数组元素出现次数统计及按频率排序(含ES8箭头函数改造)
数组元素频率统计:排序与ES8箭头函数改造
一、将reduce传统函数改为ES8箭头函数写法
直接把原reduce中的匿名函数替换为箭头函数即可,利用箭头函数的简洁语法,两种写法如下:
多行版(可读性更好)
let input = ["apple", "orange" , "pear", "orange", "apple", "orange"]; const frequency = input.reduce((acc, curr) => { acc[curr] ? ++acc[curr] : acc[curr] = 1; return acc; }, {});
单行版(利用逗号运算符简化)
const frequency = input.reduce((acc, curr) => (acc[curr] ? ++acc[curr] : acc[curr] = 1, acc), {});
二、按频率降序排列结果
普通对象无法直接按值排序(现代浏览器虽保留插入顺序,但不支持基于值的排序逻辑),需通过「对象转数组→排序→数组转回对象」的流程实现:
完整实现代码
let input = ["apple", "orange" , "pear", "orange", "apple", "orange"]; // 1. 用箭头函数完成频率统计 const frequency = input.reduce((acc, curr) => (acc[curr] ? ++acc[curr] : acc[curr] = 1, acc), {}); // 2. 按频率降序排列并转回对象 const sortedFrequency = Object.fromEntries( Object.entries(frequency).sort((a, b) => b[1] - a[1]) ); console.log(sortedFrequency); // 输出: { "orange": 3, "apple": 2, "pear": 1 }
关键步骤说明
Object.entries(frequency):将统计对象转为[["apple",2], ["orange",3], ["pear",1]]格式的二维数组sort((a,b) => b[1]-a[1]):通过比较数组第二个元素(频率值)实现降序排序,大频率的元素排在前面Object.fromEntries():将排序后的二维数组重新转换为对象,得到最终按频率降序的结果
内容的提问来源于stack exchange,提问作者Aren Trot
相关产品推荐
相关产品推荐

