我是Jquery和Javascript的新手。有人能帮我根据数组中的出现次数(计数)进行Jquery排序吗?我尝试了各种排序方法,但都不起作用。
我在Javascript中有一个数组
allTypesArray = ["4", "4","2", "2", "2", "6", "2", "6", "6"]
// here 2 is printed four times, 6 is printed thrice, and 4 is printed twice
我需要这样的输出
newTypesArray = ["2","6","4"]
我试过了
function array_count_values(e) {
var t = {}, n = "",
r = "";
var i = function (e) {
var t = typeof e;
t = t.toLowerCase();
if (t === "object") {
t = "array"
}
return t
};
var s = function (e) {
switch (typeof e) {
case "number":
if (Math.floor(e) !== e) {
return
};
case "string":
if (e in this && this.hasOwnProperty(e)) {
++this[e]
} else {
this[e] = 1
}
}
};
r = i(e);
if (r === "array") {
for (n in e) {
if (e.hasOwnProperty(n)) {
s.call(t, e[n])
}
}
}
return t
}
6: 3
}
输出为{4: 2, 2: 6, 6:3}
7条答案
按热度按时间qpgpyjmq1#
我不认为有一个直接的解决方案在一个步骤,当然它不只是一个排序(排序不删除元素)。一个方法是建立一个中间的对象Map来存储计数:
注意,这里不需要jQuery,因为如果不操作DOM,就很少需要它。
nle07wnf2#
只是添加我的想法以及(* 有点太晚了 *)
8yparm6h3#
我认为这里不需要jquery。
这个问题已经有了几个很好的答案,但我发现可靠性在一些浏览器中是一个问题(即Safari 10 --尽管可能还有其他浏览器)。
一个有点难看,但似乎可靠的解决方法如下:
测试
3ks5zfa04#
这是我用来做这类事情的函数:
wnvonmuf5#
Set
对象是值的集合。Set
中的值只能出现一次;它在Set
的集合中是唯一的。singles
变数会使用Set
对象,在数组内使用spread运算子,来分摊allTypesArray
中的所有唯一值。sortedSingles
变量通过比较数字按升序对singles
数组得值进行排序.des4xlb06#
我不确定这里是否有足够简洁的答案,这是我想到的:
使用每个元素的计数填充对象:
对于该新对象中的值,按.count对其进行排序,并将其map()到一个新数组中(仅包含值):
总计:
liwlm1x97#