我有:
myArray = ["ABAB", "ABAB", "ABAB", "CDCD", "EFEF", "EFEF"]
我需要按出现次数进行计数并按最高计数进行排序。这将是返回:
ABAB 3
EFEF 2
CDCD 1
请注意,数组内的参数会不断更改,因此对每个静态或文字文本模式进行“grepping”不会有帮助。
知道使用 JQuery 或纯 JS 实现此目的的最快方法吗?
最佳答案
第一步:构建直方图,作为 map 元素 -> 其速度频率(假设所有元素都是字符串):
var histogramMap = {};
for(var i=0, len=myArray.length; i<len; i++){
var key = myArray[i];
histogramMap[key] = (histogramMap[key] || 0) + 1;
}
第二步:转换为输出对象数组:
var histogram = [];
for(key in histogramMap) histogram.push({key: key, freq: histogramMap[key]});
第三步:对直方图进行排序
histogram.sort(function(a,b){return b.freq - a.freq})
这还假设 Object.prototype
未修改。这是一个安全的假设,很多(我认为)库,包括 jQuery,都做出了这个假设。但是,如果您决定向 Object.prototype
添加可枚举属性,这些属性将由 for..in
获取。如果想保险起见,请将第二步修改为:
var histogram = [];
for(key in histogramMap){
if(histogramMap.hasOwnProperty(i)){
histogram.push({key: key, freq: histogramMap[key]});
}
}
关于javascript - JQuery Javascript 按最高计数对数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19464440/