重新排序数组

Reordering an array

本文关键字:数组 排序 新排序      更新时间:2023-09-26

我有一个像这样的数组:

var array = [
{
    name :  "Bob",
    score : 27
},
{
    name :  "Fred",
    score : 32
},
{
    name :  "Brad",
    score : 43
}
]

所有项目最初按分数排序。在某些点,分数可能会改变,我想重新排序数组。

我现在做的是我从数组中删除球员,我更新分数,然后我循环遍历数组找到正确的位置来插入它(因为数组的其余部分仍然排序)。

是否有一种更优雅的方式来做到这一点,例如使用underscore.js ?

谢谢

您可以使用sortBy函数进行排序,例如:

function sortBy(f, xs) {
  var compare = function(x, y) {
    return typeof x == 'number' ? x - y
      : x > y ? 1
      : x < y ? -1
      : 0;
  };
  return xs.sort(function(x, y) {
    return compare(f(x), f(y));
  });
};

然后像这样使用:

sortBy(function(x){return x.score}, array);

或者使用额外的帮助器来实现可重用性:

function dot(x) {
  return function(xs) {
    return xs[x];
  }
}
sortBy(dot('score'), array);
sortBy(dot('name'), array);
...