From f6b113d53406e6378cce3155046412929395aae7 Mon Sep 17 00:00:00 2001 From: Shota Nozaki Date: Sat, 30 Sep 2017 13:47:03 +0900 Subject: [PATCH] Update README.md --- README.md | 110 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 110 insertions(+) diff --git a/README.md b/README.md index 88595ab..d21dba6 100644 --- a/README.md +++ b/README.md @@ -3,3 +3,113 @@ [![Build Status](https://travis-ci.org/emonkak/js-enumerable.svg?branch=master)](https://travis-ci.org/emonkak/js-enumerable) [![Coverage Status](https://coveralls.io/repos/emonkak/js-enumerable/badge.svg)](https://coveralls.io/r/emonkak/js-enumerable) +This library provides the individual methods of LINQ as a module. + +## Example + +```javascript +import select from '@emonkak/enumerable/select'; + +Array.from(select.call([1, 2, 3], (x) => x * 2)); // => [2, 4, 6] +``` + +You can use method chain by using [This-Binding Syntax](https://github.com/tc39/proposal-bind-operator). + +```javascript +import select from '@emonkak/enumerable/select'; +import where from '@emonkak/enumerable/where'; +import toArray from '@emonkak/enumerable/toArray'; + +[1, 2, 3] + ::where((x) => x % 2 === 0) + ::select((x) => x * 2) + ::toArray(); // => [4] +``` + +But ECMAScript This-Binding Syntax is still in a proposal yet. +You can use the extension modules instead of ECMAScript This-Binding Syntax. +The extension modules add methods to `Enumerable` class. + +```javascript +import Enumerable from '@emonkak/enumerable'; + +import '@emonkak/enumerable/extensions/select'; +import '@emonkak/enumerable/extensions/where'; +import '@emonkak/enumerable/extensions/toArray'; + +new Enumerable([1, 2, 3]) + .where((x) => x % 2 === 0) + .select((x) => x * 2) + .toArray(); // => [4] +``` + +## API + +- `aggregate(this: Iterable, seed: TAccumulate, func: (result: TAccumulate, element: TSource) => TAccumulate): TAccumulate` +- `all(this: Iterable, predicate?: (element: TSource) => boolean): boolean` +- `any(this: Iterable, predicate?: (element: TSource) => boolean): boolean` +- `average(this: Iterable, selector?: (element: TSource) => number): number` +- `buffer(this: Iterable, count: number, skip?: number): Iterable` +- `catch(this: Iterable, handler: (exception: TException) => Iterable): Iterable` +- `concat(this: Iterable, second: Iterable): Iterable` +- `count(this: Iterable, predicate?: (item: TSource) => boolean): number` +- `defaultIfEmpty(this: Iterable, defaultValue: TSource): Iterable` +- `distinct(this: Iterable): Iterable` +- `distinctUntilChanged(this: Iterable): Iterable` +- `do(this: Iterable, action: (element: TSource) => void): Iterable` +- `doWhile(this: Iterable, condition: () => boolean): Iterable` +- `elementAt(this: Iterable, index: number): TSource` +- `elementAtOrDefault(this: Iterable, index: number): TSource | null` +- `elementAtOrDefault(this: Iterable, index: number, defaultValue: TSource): TSource` +- `except(this: Iterable, second: Iterable): Iterable` +- `finally(this: Iterable, finallyAction: () => void): Iterable` +- `first(this: Iterable, predicate?: (element: TSource) => boolean): TSource` +- `firstOrDefault(this: Iterable): TSource | null` +- `firstOrDefault(this: Iterable, predicate: (element: TSource) => boolean): TSource | null` +- `firstOrDefault(this: Iterable, predicate: ((element: TSource) => boolean) | null, defaultValue: TSource): TSource` +- `forEach(this: Iterable, action: (element: TSource) => void): void` +- `groupBy(this: Iterable, keySelector: (element: TSource) => TKey): Iterable<[TKey, TSource]>` +- `groupBy(this: Iterable, keySelector: (element: TSource) => TKey, elementSelector: (element: TSource) => TElement): Iterable<[TKey, TElement]>` +- `groupJoin(this: Iterable, inner: Iterable, outerKeySelector: (element: TOuter) => TKey, innerKeySelector: (element: TInner) => TKey, resultSelector: (outer: TOuter, inner: TInner[]) => TResult): Iterable` +- `ignoreElements(this: Iterable): Iterable` +- `intersect(this: Iterable, second: Iterable): Iterable` +- `isEmpty(this: Iterable): boolean` +- `join(this: Iterable, inner: Iterable, outerKeySelector: (element: TOuter) => TKey, innerKeySelector: (element: TInner) => TKey, resultSelector: (outer: TOuter, inner: TInner) => TResult): Iterable` +- `last(this: Iterable, predicate?: (value: TSource) => boolean): TSource` +- `lastOrDefault(this: Iterable): TSource | null` +- `lastOrDefault(this: Iterable, predicate: (value: TSource) => boolean): TSource | null` +- `lastOrDefault(this: Iterable, predicate: ((value: TSource) => boolean) | null, defaultValue: TSource): TSource` +- `max(this: Iterable, selector?: (element: TSource) => number): number` +- `maxBy(this: Iterable, keySelector: (element: TSource) => TKey): TSource[]` +- `memoize(this: Iterable): Iterable` +- `min(this: Iterable, selector?: (element: TSource) => number): number` +- `minBy(this: Iterable, keySelector: (element: TSource) => TKey): TSource[]` +- `onErrorResumeNext(this: Iterable, second: Iterable): Iterable` +- `orderBy(this: Iterable): OrderedEnumerable` +- `orderByDescending(this: Iterable): OrderedEnumerable` +- `repeat(this: Iterable, count?: number): Iterable` +- `retry(this: Iterable, retryCount?: number): Iterable` +- `reverse(this: Iterable): Iterable` +- `scan(this: Iterable, seed: TAccumulate, func: (result: TAccumulate, element: TSource) => TAccumulate): Iterable` +- `select(this: Iterable, selector: (element: TSource) => TResult): Iterable` +- `selectMany(this: Iterable, collectionSelector: (element: TSource) => Iterable): Iterable` +- `single(this: Iterable, predicate?: (element: TSource) => boolean): TSource` +- `singleOrDefault(this: Iterable): TSource | null` +- `singleOrDefault(this: Iterable, predicate: (element: TSource) => boolean): TSource | null` +- `singleOrDefault(this: Iterable, predicate: ((element: TSource) => boolean) | null, defaultValue: TSource): TSource` +- `skip(this: Iterable, count: number): Iterable` +- `skipLast(this: Iterable, count: number): Iterable` +- `skipWhile(this: Iterable, predicate: (element: TSource) => boolean): Iterable` +- `startWith(this: Iterable, ...elements: TSource[]): Iterable` +- `sum(this: Iterable, selector?: (element: TSource) => number): number` +- `take(this: Iterable, count: number): Iterable` +- `takeLast(this: Iterable, count: number): Iterable` +- `takeWhile(this: Iterable, predicate: (element: TSource) => boolean): Iterable` +- `toArray(this: Iterable): TSource[]` +- `toDictionary(this: Iterable, keySelector: (element: TSource) => TKey): Map` +- `toLookup(this: Iterable, keySelector: (element: TSource) => TKey): Map` +- `toObject(this: Iterable, keySelector: (element: TSource) => string): { [key: string]: TSource; }` +- `union(this: Iterable, second: Iterable): Iterable` +- `where(this: Iterable, predicate: (item: TSource) => boolean): Iterable` +- `while(this: Iterable, condition: () => boolean): Iterable` +- `zip(this: Iterable, second: Iterable, resultSelector: (first: TFirst, second: TSecond) => TResult): Iterable`