首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在JavaScript中按值对字典进行排序

在JavaScript中按值对字典进行排序
EN

Stack Overflow用户
提问于 2014-08-26 15:29:51
回答 6查看 87.8K关注 0票数 53

这是我的字典:

代码语言:javascript
复制
const dict = {
  "x" : 1,
  "y" : 6,
  "z" : 9,
  "a" : 5,
  "b" : 7,
  "c" : 11,
  "d" : 17,
  "t" : 3
};

我需要一种方法来排序我的dict字典,从最小到最大或从最大到最小。或者,即使我有一个数组,里面有已排序的键,也没什么问题。但是我不知道如何使用javascript来做这样的事情。我在使用python之前就这样做过,如下所示:

代码语言:javascript
复制
import heapq
from operator import itemgetter

thirty_largest = heapq.nlargest(8, dict.iteritems(), key=itemgetter(1))

我在谷歌中搜索过它,我发现数组有sort()函数,但没有字典。所以我的问题是:我如何对字典进行排序? or 获得排序顺序中最大的5个值?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2014-08-26 15:39:46

在JavaScript中,它可能不是直接的。

代码语言: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的

代码语言:javascript
复制
items = map(lambda x: [x, var[x]], var.keys())

,它可以方便地写成

代码语言:javascript
复制
items = list(dict.items())

排序步骤类似于Python使用cmp参数进行排序

代码语言:javascript
复制
items.sort(cmp=lambda x, y: y[1] - x[1])

最后一步类似于Python的切片操作。

代码语言:javascript
复制
print items[:5]
// [['d', 17], ['c', 11], ['z', 9], ['b', 7], ['y', 6]]
票数 95
EN

Stack Overflow用户

发布于 2018-11-29 08:23:51

@thefourtheye提供的答案在一定程度上是有效的,但它不会返回相同的“字典”结构。

如果您希望返回一个结构与相同的排序对象,您可以对从接受的答案返回的项运行以下命令:

代码语言:javascript
复制
sorted_obj={}
$.each(items, function(k, v) {
    use_key = v[0]
    use_value = v[1]
    sorted_obj[use_key] = use_value
})

将它们组合成一个对JavaScript对象进行排序的函数:

代码语言: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函数:

代码语言:javascript
复制
dict = {
  "x" : 1,
  "y" : 6,
  "z" : 9,
  "a" : 5,
  "b" : 7,
  "c" : 11,
  "d" : 17,
  "t" : 3
};

sort_object(dict)

结果:

代码语言:javascript
复制
{
"d":17,
"c":11,
"z":9,
"b":7,
"y":6,
"a":5,
"t":3,
"x":1
}

“证明”:

代码语言:javascript
复制
res = sort_object(dict)

$.each(res, function(elem, index) {
    alert(elem)
})
票数 8
EN

Stack Overflow用户

发布于 2014-08-26 15:39:39

您可以尝试以下代码。它是按值排序的整数数组。

代码语言:javascript
复制
 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;
}

希望能有所帮助。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25500316

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档