Javascript 使用下划线排序对象

Javascript 使用下划线排序对象,javascript,underscore.js,Javascript,Underscore.js,JSON: Javascript: [ { score: 0.648 }, { score: 0.945 } ] 但是,这只返回原始数组的一个副本。一切都没有改变。我想按分数降序排列数组。你知道怎么做吗?如果你想按降序排序,请补充分数: _.sortBy(array, function(obj){ return obj.score }); 对于一般的数组排序,在下划线之外,您可以在JavaScript数组原型上使用本机的.sort()。它将数组的两个实际元素作为参数,并根据两个元

JSON:

Javascript:

[
   { score: 0.648 },
   { score: 0.945 }
]
但是,这只返回原始数组的一个副本。一切都没有改变。我想按分数降序排列数组。你知道怎么做吗?

如果你想按降序排序,请补充分数:

_.sortBy(array, function(obj){ return obj.score });
对于一般的数组排序,在下划线之外,您可以在JavaScript数组原型上使用本机的
.sort()
。它将数组的两个实际元素作为参数,并根据两个元素之间的排序关系返回一个小于、等于或大于零的数字

在你的情况下,这看起来像:

_.sortBy(array, function(obj) { return -obj.score; });

此方案更加灵活,因为排序机制为您提供了完全的控制,并且不做任何假设(除了您的比较函数是一致的;如果不一致,则会出现奇怪的行为)。

在我看来,下划线排序方案是一个非常严重的错误。例如,按逆字母顺序对字符串列表进行排序充其量是一个巨大的混乱。很好,期待着它。请注意,
sortBy
的优点是只对数组中的每个元素调用一次自定义函数,而不是对任意两个元素进行一次比较。这不是只有两个元素的问题(在这种情况下实际上更好!),但对于大型数组或复杂的比较函数,需要记住这一点。@MarkReed:对,内置是
sortBy
的最大优势
sortBy
对于反向字符串排序很麻烦,但是没有合理的方法对字符串求反。@MarkReed是的,这是真的。在这种情况下,将线性过程中的数组转换为具有基本上预先计算的键和索引值的数组是值得的。这样一来,排序就更便宜了,而且它只是构建完整排序数组的另一个线性过程。
array.sort(function(o1, o2) {
  return -(o1.score - o2.score); // or just return o2.score - o1.score if you like
}