0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

基本的なLINQ(javascript編)

Last updated at Posted at 2025-01-14

はじめに

javascriptで配列を検索するときにC#の気持ちでLINQを書いた結果、whereがエラーに…
と言うことがあったのでjavascriptでの書き方を纏めておきます。

LINQ(C# ⇔ javascript)

存在チェック(Any)

x.kind == 3が存在するか

C#
bool vegetableAny = m_vegetable.Any(x => x.kind == 3);
javascript
const vegetableAny = m_vegetable.some(x => x.kind == 3);

件数取得(Count)

x.kind == 2が何個あるか

C#
int vegetableCount = m_vegetable.Count(x => x.kind == 2);
javascript
const vegetableCount = m_vegetable.filter(x => x.kind == 2).length;

並び替え(OrderBy)

C#
// x.idの昇順に並び替え
var vegetableOrderBy = m_vegetable.OrderBy(x => x.id);
// x.idの降順に並び替え
var vegetableOrderByDescending = m_vegetable.OrderByDescending(x => x.id);
javascript
// x.idの昇順に並び替え
const vegetableOrderBy = m_vegetable.sort((a, b) => {return a.id - b.id;});
// x.idの降順に並び替え
const vegetableOrderByDescending = m_vegetable.sort((a, b) => {return b.id - a.id;});

絞り込み(Where)

x.kind == 1のデータを絞り込み

C#
var vegetableWhere = m_vegetable.Where(x => x.kind == 1);
javascript
const vegetableWhere = m_vegetable.filter(x => x.kind == 1);

最初の1件(First)

x.kind == 5のデータの最初の1件を取得

C#
var vegetableFirst = m_vegetable.First(x => x.kind == 5);
javascript
const vegetableFirst = m_vegetable.find(x => x.kind == 5);

選択(Select)

isRoot(x.kind == 1の場合:true、それ以外の場合:false)を追加

C#
var vegetableSelect = m_vegetable.Select(x => new { x.id
                                                  , x.name
                                                  , x.kind
                                                  , isRoot = x.kind == 1 });
javascript
const vegetableSelect = m_vegetable.map((x) => {return { id: x.id
                                                       , name: x.name
                                                       , kind: x.kind
                                                       , isRoot: x.kind == 1 }});

連番付与(Select)

C#
var vegetableSelectAddIndex = m_vegetable.Select((x, index) => new { index, x.id, x.name });
javascript
const vegetableSelectAddIndex = m_vegetable.map((x, index) => {return { index, id: x.id, name: x.name }});

結合(Join)

C#
// 内部結合
var vegetableInnerJoin = m_kind.Join(m_vegetable
                                   , x => x.id, y => y.kind
                                   , (x, y) => new { y.id
                                                   , y.name
                                                   , kind_id = y.kind
                                                   , kind_name = x.name });
// 外部結合
var vegetableOuterJoin = m_kind.GroupJoin(m_vegetable, x => x.id, y => y.kind, (x, y) => new { x, y })
                               .SelectMany(z => z.y.DefaultIfEmpty(new m_vegetable { id = 0, name = "", kind = 0 }), (z, w) => new { w.id, w.name, kind_id = z.x.id, kind_name = z.x.name });
javascript
// 内部結合
const vegetableInnerJoin = m_vegetable.flatMap((x) => {return m_kind.filter(y => y.id == x.kind).map((z) => {return { id: x.id, name: x.name, kind_id: z.id, kind_name: z.name } }); });
// 外部結合
//検討中

サンプルデータ

javascript
const m_kind = [{ id: 1, name: '根菜類' }
               ,{ id: 2, name: '葉茎菜類' }
               ,{ id: 3, name: '果菜類' }
               ,{ id: 4, name: '香辛野菜' }
               ,{ id: 5, name: '果実的野菜' }];

const m_vegetable = [{ id: 101, name:'大根', kind:1 }
                    ,{ id: 102, name:'人参', kind:1 }
                    ,{ id: 103, name:'ジャガイモ', kind:1 }
                    ,{ id: 104, name:'ごぼう', kind:1 }
                    ,{ id: 201, name:'白菜', kind:2 }
                    ,{ id: 202, name:'キャベツ', kind:2 }
                    ,{ id: 203, name:'ほうれん草', kind:2 }
                    ,{ id: 301, name:'キュウリ', kind:3 }
                    ,{ id: 302, name:'トマト', kind:3 }
                    ,{ id: 303, name:'ピーマン', kind:3 }
                    ,{ id: 304, name:'カボチャ', kind:3 }
                    ,{ id: 305, name:'枝豆', kind:3 }
                    ,{ id: 501, name:'メロン', kind:5 }
                    ,{ id: 502, name:'スイカ', kind:5 }];
0
0
1

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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?