对数组元素进行计数并按计数降序排序
Counting array elements and sort descending by count
阵列:
5, 5, 5, 9, 4, 2, 2, 2, 2, 2, 3, 3, 3, 3
理想输出:
2, 3, 5, 9, 4
PHP通过array_count_values()
和arsort()
简化了这一点,但事实证明javascript有点困难。有什么帮助吗?
此外,还可以返回包含计数的信息吗?针对未来需求
计算唯一条目,创建一个uniques数组,然后根据计数进行排序
function count(arr) { // count occurances
var o = {}, i;
for (i = 0; i < arr.length; ++i) {
if (o[arr[i]]) ++o[arr[i]];
else o[arr[i]] = 1;
}
return o;
}
function weight(arr_in) { // unique sorted by num occurances
var o = count(arr_in),
arr = [], i;
for (i in o) arr.push(+i); // fast unique only
arr.sort(function (a, b) {
return o[a] < o[b];
});
return arr;
}
weight([1, 3, 3, 5, 5, 5, 2, 2, 2, 2]);
// one 1, two 3s, three 5s, four 2s
// [2, 5, 3, 1]
您的示例同时有一个9
和一个4
,所以如果您想要定义订单,则需要做更多的工作。否则
weight([5, 5, 5, 9, 4, 2, 2, 2, 2, 2, 3, 3, 3, 3]);
// [2, 3, 5, 4, 9]
生成对象的阵列
function weight(arr_in) { // unique sorted by num occurances
var o = count(arr_in),
arr = [], i;
for (i in o) arr.push({value: +i, weight: o[i]}); // fast unique only
arr.sort(function (a, b) {
return a.weight < b.weight;
});
return arr;
}
var result = weight([5, 5, 5, 9, 4, 2, 2, 2, 2, 2, 3, 3, 3, 3]);
/* [
{"value": 2, "weight": 5},
{"value": 3, "weight": 4},
{"value": 5, "weight": 3},
{"value": 4, "weight": 1},
{"value": 9, "weight": 1}
] */
现在,要获得索引i
处的值,请执行result[i].value
,并对其进行加权result[i].weight
。
相关文章:
- 如何对javascript表进行排序(升序或降序),该表是某些SQL操作表的结果
- 使用Async.js sortBy的升序与降序排序顺序
- 按值降序对关联数组进行排序
- 按降序进行角度排序
- Javascript - 对包含根据日期升序和降序的对象的嵌套数组进行排序
- 解析云中的升序和降序多重排序
- DataTables排序未按降序显示
- 无法按降序对集合进行排序
- 对数组元素进行计数并按计数降序排序
- 根据属性值对键值对进行降序排序
- 按降序排序字母数字字符串
- 对数组中包含的对象按姓氏、名(降序)排序
- js比较器函数,如何实现降序排序
- 使用jQuery对HTML列表进行升序和降序排序
- 对jqGrid行数降序排序
- 按降序排序HTML表
- 使用jquery对数组进行升序和降序排序
- 我怎样才能得到一个按"减少"的降序排序的映射/减少结果;值";价值如果也使用列表功能可以实
- 按升序和降序排序字符串日期数组
- 如何按属性降序排序这个对象数组