JQuery Javascript按最高计数排序数组

JQuery Javascript按最高计数排序数组,javascript,jquery,arrays,sorting,count,Javascript,Jquery,Arrays,Sorting,Count,我有: 我需要按事件计数,并按最高计数排序。这就是回报: myArray = ["ABAB", "ABAB", "ABAB", "CDCD", "EFEF", "EFEF"] 注意,数组中的参数是不断变化的,所以对每个静态或文本模式进行“grepping”是没有帮助的 想用JQuery或纯JS实现这一点的最快方法吗?试试这个: ABAB 3 EFEF 2 CDCD 1 array_elements=[“ABAB”、“ABAB”、“ABAB”、“CDCD”、“EFEF”、“EFEF”]; va

我有:

我需要按事件计数,并按最高计数排序。这就是回报:

myArray = ["ABAB", "ABAB", "ABAB", "CDCD", "EFEF", "EFEF"]
注意,数组中的参数是不断变化的,所以对每个静态或文本模式进行“grepping”是没有帮助的

想用JQuery或纯JS实现这一点的最快方法吗?

试试这个:

ABAB 3
EFEF 2
CDCD 1
array_elements=[“ABAB”、“ABAB”、“ABAB”、“CDCD”、“EFEF”、“EFEF”];
var结果_数组=[];
无功电流=零;
var-cnt=0;
对于(var i=0;i0){
结果_array.push([current,cnt]);
}
电流=阵列_元素[i];
cnt=1;
}否则{
cnt++;
}
}
如果(cnt>0){
结果_array.push([current,cnt]);
}
result_array.sort(函数(x,y){返回y[1]-x[1]})
警报(结果数组);

结果\u数组将产生结果。

第一步:构建直方图,作为地图元素->其速度频率(假设所有元素都是字符串):

第三步:对柱状图进行排序

var histogram = [];
for(key in histogramMap) histogram.push({key: key, freq: histogramMap[key]});

这还假定未修改
Object.prototype
。这是一个安全的假设,很多(我认为)库,包括jQuery,都做出了这样的假设。但是,如果您决定将可枚举属性添加到
Object.prototype
,这些属性将由
中的..获取。如果希望安全,请将第二步修改为:

histogram.sort(function(a,b){return b.freq - a.freq})

查看firefox中的控制台以查看结果对象

myArray=[“ABAB”、“ABAB”、“ABAB”、“CDCD”、“EFEF”、“EFEF”]; 容器={}; for(var i=0;i
$array=array(“ABAB”、“ABAB”、“ABAB”、“CDCD”、“EFEF”、“EFEF”);
$array1=数组\计数\值($array);
阿尔索特(1美元);
foreach($x=>x$U值的数组1)
{
echo“Key=“.x.”,Value=“.x_值;
回声“
”; }
我最近创建了一个具有此功能的库

$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>";
    }


是否允许使用外部库?这应该是一个带下划线的单行程序。jsNo,只是jquery内部托管。另外,您有什么想法吗?应该很容易找到解决方案。嗯,您可以在数组中循环,并将每个唯一的项放在临时对象中自己的数组中。然后检查对象是否具有第一个元素与当前元素相同的数组。。。如果是,请添加到该数组中。@JanDvorak,很遗憾没有。相同的元素遵循任意顺序,这就是为什么我忙了这么长时间。不要使用
document.write
。第一,这是邪恶的。第二,当DW运行缓慢时,您不知道代码是否正在运行。第三,你不应该打印任何东西。document.write被删除,我使用了console.log。它应该打印。正如rid所指出的,您仍然应该在数组中收集结果,而不是在任何地方打印出来。关闭,但我认为带键和频率的字符串没有用处;-)请看一下我的代码。结果将存储在result_arraydon’t use
for..in
for arrays中。您可以选择带垫片的方法和其他非数值属性。此外,没有指定迭代顺序(这里不是真正的问题)。此外,我不认为数组
[“abab”,“abab”,“abab”]
是表示
“abab”
发生三次的有效方法。另外,你不需要按频率对结果进行排序。嗨,我只是在演示如何做到这一点。当然,这不是最有效的方法。你可以很容易地让它变得更好。顺便说一句,我编辑了我的答案,以摆脱在,你是对的。我只是用in,因为它打字更快;-)@rid jQuery假定
对象。prototype
没有可枚举属性。在代码中需要
hasOwnProperty
的情况下,jQuery会中断;-)在普通对象上循环时,我习惯性地忽略了
hasOwnProperty
。太棒了,喜欢它!一步一步地进行是非常有用的。非常感谢。@rid我从没听说过这样的虫子。由于jQuery做出了这样的假设,这个错误在IE8+中是不会发生的。错误的语言,而且您甚至没有按照请求对输出进行排序。Jan Dvorak-对不起,语言,现在检查它的工作,因为它仍然在PHP中,因此在javascript环境中没有用处(这是一个javascript问题)。特别是因为所有的实现都隐藏在纯javascript所没有的几个库调用中。另外,请不要使用

s。即使在测试中,
的效果也更好。这看起来与我的非常相似;-)@JanDvorak我认为只有一种方法可以做到这一点;)几周前我写了这段代码。
histogram.sort(function(a,b){return b.freq - a.freq})
var histogram = [];
for(key in histogramMap){
  if(histogramMap.hasOwnProperty(i)){
    histogram.push({key: key, freq: histogramMap[key]});
  }
}
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);
$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>";
    }
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 ] ]