在javascript中,有没有一种简单的方法可以按值对键值对进行排序并返回键?

发布于 2024-10-17 03:16:14 字数 121 浏览 2 评论 0原文

在javascript中,有没有一种简单的方法可以按值对键值对进行排序(假设值是数字)并返回键?一个 jQuery 方法来做到这一点也很有用。

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

In javascript, is there an easy way to sort key-value pairs by the value (assume the value is numeric), and return the key? A jQuery way to do this would be useful as well.

(There are a lot of related questions about key-value pairs here, but I can't find one specifically about sorting.)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

べ映画 2024-10-24 03:16:14

跨浏览器要做到这一点并不容易。假设有一个数组,例如

var a = [
    {key: "foo", value: 10},
    {key: "bar", value: 1},
    {key: "baz", value: 5}
];

...,您可以获得按 value 排序的 key 属性数组,如下所示:

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"];

There's nothing easy to do this cross-browser. Assuming an array such as

var a = [
    {key: "foo", value: 10},
    {key: "bar", value: 1},
    {key: "baz", value: 5}
];

... you can get an array of the key properties sorted by value as follows:

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"];
寄风 2024-10-24 03:16:14

假设我们有一个 ObjectsArray,例如:

var data = [
    {foo: 6},
    {foo: 2},
    {foo: 13},
    {foo: 8}
];

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

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

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

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

Let's assume we have an Array of Objects, like:

var data = [
    {foo: 6},
    {foo: 2},
    {foo: 13},
    {foo: 8}
];

We can call Array.prototype.sort()help, use Array.prototype.map()help to map a new array and Object.keys()help to grab the key:

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

Be aware of, Array.prototype.map() requires Javascript 1.6 and Object.keys() is ECMAscript5 (requires Javascript 1.8.5).

You'll find alternative code for all those methods on MDC.

找个人就嫁了吧 2024-10-24 03:16:14

据我所知,没有内置的 Javascript 函数可以按数组的键对数组进行排序。

但是,不需要太多代码即可完成此操作:只需将键提取到自己的数组中,使用正常的 sort 函数对它们进行排序,然后按正确的顺序重建数组即可。像这样的事情应该可以解决问题:

function SortArrayByKeys(inputarray) {
  var arraykeys=[];
  for(var k in inputarray) {arraykeys.push(k);}
  arraykeys.sort();

  var outputarray=[];
  for(var i=0; i<arraykeys.length; i++) {
      outputarray[arraykeys[i]]=inputarray[arraykeys[i]];
  }
  return outputarray;
}

现在你可以像这样调用你的函数:

var myarray = {'eee':12, 'blah':34 'what'=>66, 'spoon':11, 'snarglies':22};
myarray = SortArrayByKeys(myarray);

输出将是:

{'blah':34, 'eee':12, 'spoon':11, 'snarglies':22, 'what':66}

希望有帮助。

此处的工作测试页面:http://jsfiddle.net/6Ev3S/

As far as I know, there isn't a built-in Javascript function to sort an array by its keys.

However, it shouldn't take too much code to do it: just extract the keys into their own array, sort them using the normal sort function, and rebuild the array in the right order. Something like this should do the trick:

function SortArrayByKeys(inputarray) {
  var arraykeys=[];
  for(var k in inputarray) {arraykeys.push(k);}
  arraykeys.sort();

  var outputarray=[];
  for(var i=0; i<arraykeys.length; i++) {
      outputarray[arraykeys[i]]=inputarray[arraykeys[i]];
  }
  return outputarray;
}

Now you can just call your function like so:

var myarray = {'eee':12, 'blah':34 'what'=>66, 'spoon':11, 'snarglies':22};
myarray = SortArrayByKeys(myarray);

And the output will be:

{'blah':34, 'eee':12, 'spoon':11, 'snarglies':22, 'what':66}

Hope that helps.

Working test page here: http://jsfiddle.net/6Ev3S/

一笔一画续写前缘 2024-10-24 03:16:14

给定

var object = {
  'a': 5,
  'b': 11,
  'c': 1,
  'd': 2,
  'e': 6
}

您可以使用以下命令按 object 的键的值对它们进行排序

Object.keys(object).sort(function (a, b) {
  return object[a] - object[b]
}))

[ 'c', 'd', 'a', 'e', 'b' ]

Given

var object = {
  'a': 5,
  'b': 11,
  'c': 1,
  'd': 2,
  'e': 6
}

You can sort object's keys by their values using the following:

Object.keys(object).sort(function (a, b) {
  return object[a] - object[b]
}))

Result

[ 'c', 'd', 'a', 'e', 'b' ]
度的依靠╰つ 2024-10-24 03:16:14

如果您不能依赖扩展的数组和对象属性,

您可以使用原始的数组方法 -

function keysbyValue(O){
    var A= [];
    for(var p in O){
        if(O.hasOwnProperty(p)) A.push([p, O[p]]);
    }
    A.sort(function(a, b){
        var a1= a[1], b1= b[1];
        return a1-b1;
    });
    for(var i= 0, L= A.length; i<L; i++){
        A[i]= A[i][0];
    }
    return A;
}
//test

    var Obj={a: 20, b: 2, c: 100, d: 10, e: -10};
    keysbyValue(Obj)

    /*  returned value: (Array)
    e,b,d,a,c
    */

If you can't count on the exended array and object properties,

you can use the original Array methods-

function keysbyValue(O){
    var A= [];
    for(var p in O){
        if(O.hasOwnProperty(p)) A.push([p, O[p]]);
    }
    A.sort(function(a, b){
        var a1= a[1], b1= b[1];
        return a1-b1;
    });
    for(var i= 0, L= A.length; i<L; i++){
        A[i]= A[i][0];
    }
    return A;
}
//test

    var Obj={a: 20, b: 2, c: 100, d: 10, e: -10};
    keysbyValue(Obj)

    /*  returned value: (Array)
    e,b,d,a,c
    */
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文