Home Reference Source

src/sortBy.js

import sort from './sort';

/**
 * 関数の戻り値でソートします。
 *
 * @param {*[]} args - [keyfn, comp, coll]か[keyfn, coll]。compが省略された場合は<演算子。
 *
 * @return {iterator} ソートされた集合のイテレーター
 *
 * @example
 * sortBy(x => x.getAge(), xs);  // 年齢順でソート
 */
export default function sortBy(...args) {
  const [keyfn, comp, coll] = (() => {
    switch (args.length) {
    case 0:
      throw 'Invalid arguments';

    case 1:
      throw 'Invalid arguments';

    case 2:
      return [args[0], (x, y) => x < y, args[1]];

    default:
      return args;
    }
  })();

  return sort((x, y) => comp(keyfn(x), keyfn(y)), coll);
}