TypeScriptでlinq-es5(asEnumerable)の使い方

TypeScriptでlinq-es5(asEnumerable)の使い方

TypeScriptでlinq-es5を使ってみます。参考サイト:linq-es5の使い方

とりあえずインストールします。

npm install --save-dev linq-es5

asEnumerableは、配列みたいなiterableな変数を操作します。

Whereメソッド

引数に関数を渡します。

import asEnumerable from 'linq-es5';
let a:number[] = asEnumerable([1,2,3,4]).Where(n => n > 1).ToArray();
console.log(a); // [ 2, 3, 4 ]と表示される

n > 1を満たす配列が返ってきます。(ちなみにToArray()しているからです)

Selectメソッド

引数に関数を渡します。

import asEnumerable from 'linq-es5';

let a:boolean[] = asEnumerable([1,2,3,4]).Select(n => n > 1).ToArray();
console.log(a); // [ false, true, true, true ]と表示される

条件を満たす場合trueを返し、満たさない場合falseを返します。返ってくる配列長は変わりません。

SelectManyメソッド

引数に関数を渡します。

import asEnumerable from 'linq-es5';

let a:string[] = asEnumerable(['a,b','c,d,e']).SelectMany(n => n.split(',')).ToArray();
console.log(a); // [ 'a', 'b', 'c', 'd', 'e' ] と表示される

SelectManyメソッドは説明するのが難しいです。返ってくる配列長は変わる可能性があり、上記は配列要素をsplit()メソッドで分割してその分割した結果を配列につなげて返しています。

Aggregateメソッド

引数に関数を渡します。

import asEnumerable from 'linq-es5';

let a:number = asEnumerable([1,2,3,4]).Aggregate((m, n) => m + n);
console.log(a); // 10と表示される

Aggregateは集計するという意味なので、そのまま集計してくれます。このメソッドにToArray()メソッドをチェインすることはできません。

上記は数値を集計しています、文字列の場合は以下のように文字列連結をしてくれます。

import asEnumerable from 'linq-es5';

let a:string = asEnumerable(['a','bcd','ef']).Aggregate((m, n) => m + n);
console.log(a); // abcdefと表示される

FirstOrDefaultメソッド

引数に関数を渡します。

import asEnumerable from 'linq-es5';

let a:number = asEnumerable([1,2,3,4]).FirstOrDefault(n => n === 3);
console.log(a); // 3と表示される

最初に条件を満たした値だけを返します。条件を満たさない場合は既定値を返すようです。

上記は数値の配列なので、既定値は0が返ってきます。

文字列の配列の場合は、既定値はブランク”が返ってきます。

import asEnumerable from 'linq-es5';

let a:string = asEnumerable(['b']).FirstOrDefault(n => n === 'c');
console.log(a === ''); // trueと表示される

Firstメソッド

引数に関数を渡します。

import asEnumerable from 'linq-es5';

let a:number = asEnumerable([1,2,3,4]).First(n => n >= 3);
console.log(a); // 3と表示される

最初に条件を満たした値だけを返します。条件を満たさない場合はエラーになります。

import asEnumerable from 'linq-es5';

let a:number = asEnumerable([1,2,3,4]).First(n => n >= 5); // 満たさない条件を指定する
console.log(a);

以下、エラーメッセージです。

No element satisfies the condition in predicate

「条件を満たす要素がない」だそうです。

Skipメソッド

引数に関数を渡します。

import asEnumerable from 'linq-es5';

let a:any = asEnumerable([1,2,3,4]).Skip(2).ToArray();
console.log(a); // [ 3, 4 ]と表示される

iterableな変数を先頭から指定した数だけスキップして配列を返します。

上記は先頭の2つをスキップした配列を返しています。

linqについてはC#の経験があれば知っていて当然だそうですが、私自身C#が大嫌いなので、linq-es5については大変勉強になりました。

OrderByメソッド

引数はありません。

import asEnumerable from 'linq-es5';

let a:number[] = asEnumerable([3,2,6,4,0]).OrderBy().ToArray();
console.log(a); [ 0, 2, 3, 4, 6 ]と表示される

配列要素を昇順にソートします。

OrderByDescendingメソッド

引数はありません。

import asEnumerable from 'linq-es5';

let a:number[] = asEnumerable([3,2,6,4,0]).OrderByDescending().ToArray();
console.log(a); [ 6, 4, 3, 2, 0 ]と表示される

配列要素を降順にソートします。

Concatメソッド

引数に関数を渡します。

import asEnumerable from 'linq-es5';

let a:number[] = asEnumerable([1,2,3]).Concat([4,5]).ToArray();
console.log(a); [ 1, 2, 3, 4, 5 ]と表示される

iterableな変数と引数を連結します。

Countメソッド

引数はありません。

import asEnumerable from 'linq-es5';

let a:number = asEnumerable([1,2,3,1,2,3]).Count();
console.log(a); // 6と表示される

iterableな変数の要素の件数を取得します。

Anyメソッド

引数に関数を渡します。

import asEnumerable from 'linq-es5';

let a:boolean = asEnumerable([1,2,3]).Any(n => n === 3);
console.log(a); // true

iterableな変数の要素が一つでも条件を満たす場合はtrueを返し、一つも満たさない場合はfalseを返します。

Containsメソッド

引数に判定したい要素の値を指定します。

import asEnumerable from 'linq-es5';

let a:boolean = asEnumerable([1,2,3]).Contains(2);
console.log(a); // trueと表示される

参考サイト

TypeScriptでlinq-es5(asEnumerable)の使い方

コメント

タイトルとURLをコピーしました