You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

数组元素出现次数统计及按频率排序(含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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 06:36:32