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

如何按count字段对数据数组(含getFrequency返回数组)降序排序?

按count字段对字符频率数组降序排序的解决方案

嘿,这个需求很好解决~你已经写好了统计字符频率的核心函数,只需要借助JavaScript数组的sort()方法,传入自定义的比较逻辑就能实现按count值降序排列了。

方法一:在函数内部直接返回排序后的数组

你可以在函数最后return之前,给生成的data数组加上排序逻辑。修改后的完整函数如下:

function getFrequency(str){ 
  var sorted = str.split("").sort(); 
  var data = []; 
  for(var i = 0; i < sorted.length; i++){ 
    var last = data[data.length - 1] 
    if(last && last.character === sorted[i]) 
      last.count++; 
    else 
      data.push({character : sorted[i], count: 1}); 
  } 
  // 按count字段降序排序
  return data.sort((a, b) => b.count - a.count); 
}

方法二:调用函数后再对结果排序

如果你不想改动原函数,也可以在拿到函数返回的频率数组后,单独进行排序操作:

// 调用原函数获取未排序的频率数组
const frequencyData = getFrequency("hello world");
// 按count降序排序
const sortedData = frequencyData.sort((a, b) => b.count - a.count);

关键逻辑解析

这里的核心是sort()方法的自定义比较函数(a, b) => b.count - a.count:

  • a和b代表数组中正在被比较的两个元素
  • 当b.count - a.count的结果为正数时,b会被排在a的前面,也就是count值更大的元素靠前,实现降序
  • 如果需要升序排列,只需要把比较逻辑改成a.count - b.count即可

小提示:避免原地修改原数组

sort()方法是原地修改原数组的,如果后续还需要用到未排序的原数组,可以先复制一份再排序:

// 函数内部写法:返回新数组,不修改原data
return [...data].sort((a, b) => b.count - a.count);

// 调用时写法:复制原数组后排序
const sortedData = [...frequencyData].sort((a, b) => b.count - a.count);

举个实际例子,输入字符串"aabbbcc",排序后的结果会是:

[{character: 'b', count: 3}, {character: 'a', count: 2}, {character: 'c', count: 2}]

内容的提问来源于stack exchange,提问作者Mayank Nauriyal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:14:22