在javascript中,是否有一种通过值对键值对进行排序的简单方法,并返回键?

Dav*_*den 12 javascript sorting jquery key-value

在javascript中,是否有一种通过值对键值对进行排序的简单方法(假设值为数字),并返回键?使用jQuery方法也很有用.

(这里有很多关于键值对的相关问题,但我找不到一个专门关于排序的问题.)

Tim*_*own 21

这种跨浏览器并不容易.假设一个数组如

var a = [
    {key: "foo", value: 10},
    {key: "bar", value: 1},
    {key: "baz", value: 5}
];
Run Code Online (Sandbox Code Playgroud)

...您可以keyvalue如下方式获取按以下顺序排列的属性数组:

var sorted = a.slice(0).sort(function(a, b) {
   return a.value - b.value;
});

var keys = [];
for (var i = 0, len = sorted.length; i < len; ++i) {
    keys[i] = sorted[i].key;
}

// keys is ["bar", "baz", "foo"];
Run Code Online (Sandbox Code Playgroud)

  • 这不是唯一的好答案,但这个答案最接近以我能理解的方式完成我想做的事情。这并不是说这是最佳答案。 (2认同)

jAn*_*ndy 7

假设我们有一个ArrayObjects,如:

var data = [
    {foo: 6},
    {foo: 2},
    {foo: 13},
    {foo: 8}
];
Run Code Online (Sandbox Code Playgroud)

我们可以调用Array.prototype.sort()帮助,使用Array.prototype.map()帮助来映射新数组并Object.keys()帮助获取密钥:

var keys = data.sort(function(a,b) {
    return a.foo - b.foo;
}).map(function(elem, index, arr) {
   return Object.keys(elem)[0];
});
Run Code Online (Sandbox Code Playgroud)

请注意,Array.prototype.map()需要Javascript 1.6并且Object.keys()是ECMAscript5(需要Javascript 1.8.5).

您将在MDC上找到所有这些方法的替代代码.