0

可能重复:
对对象数组进行排序的简单函数

编写脚本时,对数组进行排序时出现问题。我有一个对象数组:

[{gold: false, range: 1601}, {gold: true, range: 13}, {gold: false, range: 375}, {gold: true, range: 601}

但它应该看起来像这样:

[{gold: true, range: 13}, {gold: true, range: 601}, {gold:false, range: 375}, {gold: false, range: 1601}]

我想得到一个数组,其中的键按增加范围排序。但是如果有黄金键值是真的,那么他们是第一个。

4

2 回答 2

11

使用这样的东西:

yourArray.sort(function(a, b){
    return a["gold"] == b["gold"] ? a["range"] - b["range"] : a["gold"] ? -1 : 1;
});

甚至这样:

yourArray.sort(function(a, b){
    return  b["gold"] - a["gold"] || a["range"] - b["range"];
});

第二种方法实际上真的很酷))您可以将此模式用于对象中的任意数量的字段,只需按它们的重要性对它们进行排序。如果某个字段应该按升序排序 - 比 a["..."] - b["...],如果按降序排序 - 比 b["..."] - a["..."]

于 2012-12-29T12:32:09.993 回答
3

尝试

var arr = [{gold: false, range: 1601}, {gold: true, range: 13}, {gold: false, range: 375}, {gold: true, range: 601}], 
    sorter = function(a, b) {
      if(a.gold && !b.gold) {return -1;}
      if(!a.gold && b.gold) {return 1;}
      return a.range - b.range;
    };

arr.sort(sorter);
于 2012-12-29T12:28:38.873 回答