如何实现排序机制?

How to implement a sort by mechanism?

array.sort() 正在接受一个 return 数字的函数。所以通常是这样的

myArray.sort((item1, item2) => a < b);

好的,我想要的是:

myArray.sort(by(obj => obj.id))

所以:

它应该看起来像这样......不幸的是我无法通过各种方法让它工作。

by = (getter : any => number): ((any, any) => number) => (x,y) => {
  var xValue = getter(x);
  var yValue = getter(y);

  if (xValue > yValue)
    return 1;
  else (xValue < yValue)
    return -1;
  else return 0;
}

我走的路对吗? 谢谢!

是的,几乎没问题,我也会将其设为泛型以获得额外的类型安全性:

const by = <T>(getter: (v: T) => number) => (x :T, y :T) => {
    var xValue = getter(x);
    var yValue = getter(y);

    if (xValue > yValue)
        return 1;
    else if (xValue < yValue)
        return -1;
    else return 0;
}
let myArray = [
    { id : 1 },
    { id : 5 },
    { id : 3 },
    { id : 2 },
]
myArray.sort(by(o=> o.id)); // o is inferred to { id: number }, which should be helpful