编写脚本时,排序数组时出现问题。 我有一系列对象:
[{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}]
我想得到一个数组,其中键按增加范围排序。但如果金键值为真,则它们是第一个。
答案 0 :(得分: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"];
});
第二种方法实际上很酷))你可以将这种模式用于对象中的任意数量的字段,只需根据它们的重要性对它们进行排序。如果某个字段应按升序排序 - 而不是[“...”] - b [“...],如果是降序 - 而不是b [”...“] - a [”...“] < / p>
答案 1 :(得分: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);