我有:
myArray = ["ABAB", "ABAB", "ABAB", "CDCD", "EFEF", "EFEF"]
我需要按出现次数计数并按最高计数排序。这将是回报:
ABAB 3
EFEF 2
CDCD 1
请注意,数组中的参数会不断更改,因此对每个静态或文字文本模式进行“grepping”将无济于事。
知道使用 JQuery 或普通 JS 最快的方法吗?
我有:
myArray = ["ABAB", "ABAB", "ABAB", "CDCD", "EFEF", "EFEF"]
我需要按出现次数计数并按最高计数排序。这将是回报:
ABAB 3
EFEF 2
CDCD 1
请注意,数组中的参数会不断更改,因此对每个静态或文字文本模式进行“grepping”将无济于事。
知道使用 JQuery 或普通 JS 最快的方法吗?
第一步:构建直方图,作为地图元素 -> 它的速度频率(假设所有元素都是字符串):
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]});
}
}
我最近创建了一个具有这种功能的库。
var items = {}, sortableItems = [], i, len, element,
listOfStrings = ["ABAB", "ABAB", "ABAB", "CDCD", "EFEF", "EFEF"];
for (i = 0, len = listOfStrings.length; i < len; i += 1) {
if (items.hasOwnProperty(listOfStrings[i])) {
items[listOfStrings[i]] += 1;
} else {
items[listOfStrings[i]] = 1;
}
}
for (element in items) {
if (items.hasOwnProperty(element)) {
sortableItems.push([element, items[element]]);
}
}
sortableItems.sort(function (first, second) {
return second[1] - first[1];
});
console.log(sortableItems);
输出
[ [ 'ABAB', 3 ], [ 'EFEF', 2 ], [ 'CDCD', 1 ] ]
$array = array("ABAB", "ABAB", "ABAB", "CDCD", "EFEF", "EFEF");
$array1=array_count_values($array);
arsort($array1);
foreach($array1 as $x=>$x_value)
{
echo "Key=" . $x . ", Value=" . $x_value;
echo "<br>";
}
尝试这个:
array_elements = ["ABAB", "ABAB", "ABAB", "CDCD", "EFEF", "EFEF"];
var result_array = [];
var current = null;
var cnt = 0;
for (var i = 0; i < array_elements.length; i++) {
if (array_elements[i] != current) {
if (cnt > 0) {
result_array.push([current,cnt]);
}
current = array_elements[i];
cnt = 1;
} else {
cnt++;
}
}
if (cnt > 0) {
result_array.push([current,cnt]);
}
result_array.sort(function(x,y) {return y[1] - x[1]})
alert(result_array);
result_array 将有结果。
在 Firefox 中查看控制台以查看生成的对象
myArray = ["ABAB", "ABAB", "ABAB", "CDCD", "EFEF", "EFEF"];
container={};
for(var i=0; i < myArray.length;i++){
var el=myArray[i];
if( el in container){
container[el].push(el);
}
else{
container[el]=[];
container[el].push(el);
}
}
console.log(container);