LoginSignup
3
5

More than 5 years have passed since last update.

linq.js メモ

Posted at

会社でlinq.jsを使っているので紹介とよく使うライブラリのメモ

LINQとは?

LINQとは統合言語クエリ (LINQ: Language-Integrated Query)の略で
C#言語などに使われる配列操作を簡単にすることができものです。
簡単に言うとforeachの上位互換です。

linq.jsはそのLINQをjavaScriptに移植したライブラリです。
http://neue.cc/reference.htm

使い方

# install
npm install linq 


#import
import linq from 'linq'

よく使うメソッド

データ

const user = new Object(
    [
        {'id': 1, 'name': "tanaka", 'age': 24 },
        {'id': 2, 'name': "takahasi", 'age': 31 },
        {'id': 3, 'name': "suzuki", 'age': 29 },
        {'id': 4, 'name': "satou", 'age': 35 },
    ]
);

let user2 = new Object();

フィルター処理 [where]

const where = linq.from(user).where(x => x.age < 30).toArray()
console.log(where);
/* [{id: 1, name: "tanaka", age: 24},
** {id: 3, name: "suzuki", age: 29}]
*/

配列のすべての値に関数を適用したものを取得 [select]

const select = linq.from(user).select(x => x.age + 1).toArray()
console.log(select);
// [25, 32, 30, 36]

配列の先頭を取得 [first]

const first = linq.from(user).first()
console.log(first);
// {id: 1, name: "tanaka", age: 24}

先頭から何個か取得 [take]

const take = linq.from(user).take(2).toArray()
console.log(take);
/* [{id: 1, name: "tanaka", age: 24},
**  {id: 2, name: "takahasi", age: 31}]
*/

幾つかを飛ばして残りを取得 [skip]

const skip = linq.from(user).skip(2).toArray()
console.log(skip);
/* [{id: 3, name: "suzuki", age: 29},
**     {id: 4, name: "satou", age: 35}]
*/

先頭から条件を満たさなくなるまで取得(一度でも条件を満たさなくなったらストップ) [takeWhile]

const takeWhile = linq.from(user).takeWhile(x => x.age < 30).toArray()
console.log(takeWhile)
//{id: 1, name: "tanaka", age: 24}

条件を満たす最初の要素を取得する なければデフォルト(第二引数)を取得 [firstOrDefault]

const firsrOrDefault = linq.from(user).firstOrDefault(x => x.age < 30, 0)
const firsrOrDefault2 = linq.from(user).firstOrDefault(x => x.age < 10, 0)

console.log(firsrOrDefault);   //{id: 1, name: "tanaka", age: 24}
console.log(firsrOrDefault2);  //0

要素数数える [count]

const count = linq.from(user).count()
console.log(count)  //4

すべての要素が条件をみたすならtrue [all]

const all = linq.from(user).all(x => x.age > 20)
console.log(all);  //true

一つでも要素が条件をみたすならtrue [any]

const any = linq.from(user).any(x => x.name === 'suzuki')
console.log(any);  //true

リストが空か [any]

console.log(linq.from(user).any());   //true
console.log(linq.from(user2).any());  //false

最大値,最小値,平均値 [max, min, average]

console.log(linq.from(user).max(x => x.age) )  //35
console.log(linq.from(user).min(x => x.age) )  //24
console.log(linq.from(user).average( x => x.age)) //29.75

ソート [orderBy,orderByDescending]

//(昇順)
console.log(linq.from(user).orderBy(x => x.age).toArray());
//(降順)
console.log(linq.from(user).orderByDescending(x => x.age).toArray());

まとめ

  • laravel使っている人はモデルにLINQが使われているので使いやすい。
  • ネストが深くなるのを防げる
  • 可読性アップ!
  • スタイリッシュに書ける

皆さんも是非使ってみてください

3
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
5