这是我的字典:
const dict = {
"x" : 1,
"y" : 6,
"z" : 9,
"a" : 5,
"b" : 7,
"c" : 11,
"d" : 17,
"t" : 3
};
我需要一种方法来排序我的dict
字典,从最小到最大或从最大到最小。或者,即使我有一个数组,里面有已排序的键,也没什么问题。但是我不知道如何使用javascript
来做这样的事情。我在使用python
之前就这样做过,如下所示:
import heapq
from operator import itemgetter
thirty_largest = heapq.nlargest(8, dict.iteritems(), key=itemgetter(1))
我在谷歌中搜索过它,我发现数组有sort()
函数,但没有字典。所以我的问题是:我如何对字典进行排序? or 获得排序顺序中最大的5个值?
发布于 2014-08-26 15:39:46
在JavaScript中,它可能不是直接的。
var dict = {
"x": 1,
"y": 6,
"z": 9,
"a": 5,
"b": 7,
"c": 11,
"d": 17,
"t": 3
};
// Create items array
var items = Object.keys(dict).map(function(key) {
return [key, dict[key]];
});
// Sort the array based on the second element
items.sort(function(first, second) {
return second[1] - first[1];
});
// Create a new array with only the first 5 items
console.log(items.slice(0, 5));
第一步,创建项目数组,类似于Python的
items = map(lambda x: [x, var[x]], var.keys())
,它可以方便地写成
items = list(dict.items())
排序步骤类似于Python使用cmp
参数进行排序
items.sort(cmp=lambda x, y: y[1] - x[1])
最后一步类似于Python的切片操作。
print items[:5]
// [['d', 17], ['c', 11], ['z', 9], ['b', 7], ['y', 6]]
发布于 2018-11-29 08:23:51
@thefourtheye提供的答案在一定程度上是有效的,但它不会返回相同的“字典”结构。
如果您希望返回一个结构与相同的排序对象,您可以对从接受的答案返回的项运行以下命令:
sorted_obj={}
$.each(items, function(k, v) {
use_key = v[0]
use_value = v[1]
sorted_obj[use_key] = use_value
})
将它们组合成一个对JavaScript对象进行排序的函数:
function sort_object(obj) {
items = Object.keys(obj).map(function(key) {
return [key, obj[key]];
});
items.sort(function(first, second) {
return second[1] - first[1];
});
sorted_obj={}
$.each(items, function(k, v) {
use_key = v[0]
use_value = v[1]
sorted_obj[use_key] = use_value
})
return(sorted_obj)
}
示例
只需将您的对象传递给sort_object函数:
dict = {
"x" : 1,
"y" : 6,
"z" : 9,
"a" : 5,
"b" : 7,
"c" : 11,
"d" : 17,
"t" : 3
};
sort_object(dict)
结果:
{
"d":17,
"c":11,
"z":9,
"b":7,
"y":6,
"a":5,
"t":3,
"x":1
}
“证明”:
res = sort_object(dict)
$.each(res, function(elem, index) {
alert(elem)
})
发布于 2014-08-26 15:39:39
您可以尝试以下代码。它是按值排序的整数数组。
function sortJsObject() {
var dict = {"x" : 1, "y" : 6, "z" : 9, "a" : 5, "b" : 7, "c" : 11, "d" : 17, "t" : 3};
var keys = [];
for(var key in dict) {
keys[keys.length] = key;
}
var values = [];
for(var i = 0; i < keys.length; i++) {
values[values.length] = dict[keys [i]];
}
var sortedValues = values.sort(sortNumber);
console.log(sortedValues);
}
// this is needed to sort values as integers
function sortNumber(a,b) {
return a - b;
}
希望能有所帮助。
https://stackoverflow.com/questions/25500316
复制相似问题