![](/img/trans.png)
[英]Sort method for an objects property that is inside an array of objects from a class
[英]How to Best Sort an Array of Objects by Property or Method?
我正在编写一个函数,它将按属性或方法值对对象数组进行排序。 以下代码正在运行。 但是我该如何改进呢? 我觉得里面有很多重复的代码。
transform(array: any, field: string): any[] {
if (!Array.isArray(array)) {
return;
}
array.sort((a: any, b: any) => {
if (typeof a[field] == 'function' && typeof b[field] == 'function') {
if (a[field]() < b[field]()) {
return -1;
} else if (a[field]() > b[field]()) {
return 1;
} else {
return 0;
}
}
if (a[field] < b[field]) {
return -1;
} else if (a[field] > b[field]) {
return 1;
} else {
return 0;
}
});
return array;
}
const callOrTake = it => typeof it === "function" ? it() : it;
const compare = (a, b) => a === b ? 0 : (a > b ? 1 : -1);
const transform = <T> (array: T[], field: keyof T) => array.sort((a, b) => compare(callOrTake(a[field]), callOrTake(b[field])));
进行了以下改进:
(1) 调用字段如果是函数被移到它自己的函数以避免重复。
(2) 改进了transform 的签名,使得字段不能是任何字符串,而必须是数组内任何内容的键。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.