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と表示される
KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^
コメント