import isArray from './is-array'; import isString from './is-string'; import isFunction from './is-function'; export interface ObjectType { [key: string]: T; } function sortBy (arr: ObjectType[], key: Function): ObjectType[]; function sortBy (arr: ObjectType[], key: string): ObjectType[]; function sortBy (arr: ObjectType[], key: string[]): ObjectType[]; function sortBy (arr: ObjectType[], key: Function | string | string[]): ObjectType[] { 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;