如何按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
相关产品推荐
相关产品推荐

