@antv/util
Version:
> AntV 底层依赖的工具库,不建议在自己业务中使用。
43 lines (37 loc) • 1.03 kB
text/typescript
import isArray from './is-array';
import isString from './is-string';
import isFunction from './is-function';
export interface ObjectType<T> {
[key: string]: T;
}
function sortBy<T>(arr: ObjectType<T>[], key: Function): ObjectType<T>[];
function sortBy<T>(arr: ObjectType<T>[], key: string): ObjectType<T>[];
function sortBy<T>(arr: ObjectType<T>[], key: string[]): ObjectType<T>[];
function sortBy<T>(arr: ObjectType<T>[], key: Function | string | string[]): ObjectType<T>[] {
let comparer;
if (isFunction(key)) {
comparer = (a, b) => key(a) - key(b);
} else {
let keys = [];
if (isString(key)) {
keys.push(key);
} else if (isArray(key)) {
keys = key;
}
comparer = (a, b) => {
for (let i = 0; i < keys.length; i += 1) {
const prop = keys[i];
if (a[prop] > b[prop]) {
return 1;
}
if (a[prop] < b[prop]) {
return -1;
}
}
return 0;
};
}
arr.sort(comparer);
return arr;
}
export default sortBy;