如何实现排序机制?
How to implement a sort by mechanism?
array.sort() 正在接受一个 return 数字的函数。所以通常是这样的
myArray.sort((item1, item2) => a < b);
好的,我想要的是:
myArray.sort(by(obj => obj.id))
所以:
- 我有一个参数,它是一个函数,return是一个来自任意
的数字
- i return 一个函数,它有 2 个参数(要比较的参数)和 returns 一个数字
- 此函数比较 2 个结果
它应该看起来像这样......不幸的是我无法通过各种方法让它工作。
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
array.sort() 正在接受一个 return 数字的函数。所以通常是这样的
myArray.sort((item1, item2) => a < b);
好的,我想要的是:
myArray.sort(by(obj => obj.id))
所以:
- 我有一个参数,它是一个函数,return是一个来自任意 的数字
- i return 一个函数,它有 2 个参数(要比较的参数)和 returns 一个数字
- 此函数比较 2 个结果
它应该看起来像这样......不幸的是我无法通过各种方法让它工作。
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