0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

TypeScriptで2つ選ぶ組み合わせの生成をワンライナーでやる

Last updated at Posted at 2021-12-15

目的

TypeScriptで配列内の2つの要素の組み合わせをワンライナーでやります。
3つ以上は他の記事を参考にしてください。

実装

const arr = [...Array(5).keys()];
const comb = arr.map((v, i) =>
    arr.map((g, j) =>
        i < j ? [v, g] : undefined
    ).filter((coupling): coupling is number[] => coupling !== undefined)
).flat();

内部のmapではnumber[]とundefinedの二つが生成されるため、filterでundefinedをはじきつつ型ガードしています。
参考

出来ているか見てみましょう。

console.log(comb);
[
  [ 0, 1 ],
  [ 0, 2 ],
  [ 0, 3 ],
  [ 0, 4 ],
  [ 1, 2 ],
  [ 1, 3 ],
  [ 1, 4 ],
  [ 2, 3 ],
  [ 2, 4 ],
  [ 3, 4 ] 
]

出来ていますね!

おまけ

const 虹ヶ咲学園スクールアイドル同好会: string[] = [
    '高咲侑',
    '上原歩夢',
    '中須かすみ',
    '桜坂しずく',
    '朝香果林',
    '宮下愛',
    '近江彼方',
    '優木せつ菜',
    'エマ・ヴェルデ',
    '天王寺璃奈',
    '三船栞子',
    'ミア・テイラー',
    '鐘嵐珠'
];
const カップリング = 虹ヶ咲学園スクールアイドル同好会.map((v: string, i: number) =>
    虹ヶ咲学園スクールアイドル同好会.map((g: string, j: number) =>
        i < j ? [v, g] : undefined
    ).filter((coupling): coupling is string[] => coupling !== undefined)
).flat();

console.log(カップリング);
[
  [ '高咲侑', '上原歩夢' ],      
  [ '高咲侑', '中須かすみ' ],    
  [ '高咲侑', '桜坂しずく' ],    
  [ '高咲侑', '朝香果林' ],      
  [ '高咲侑', '宮下愛' ],        
  [ '高咲侑', '近江彼方' ],      
  [ '高咲侑', '優木せつ菜' ],    
  [ '高咲侑', 'エマ・ヴェルデ' ],
  [ '高咲侑', '天王寺璃奈' ],    
  [ '高咲侑', '三船栞子' ],
  [ '高咲侑', 'ミア・テイラー' ],
  [ '高咲侑', '鐘嵐珠' ],
  [ '上原歩夢', '中須かすみ' ],
  [ '上原歩夢', '桜坂しずく' ],
  [ '上原歩夢', '朝香果林' ],
  [ '上原歩夢', '宮下愛' ],
  [ '上原歩夢', '近江彼方' ],
  [ '上原歩夢', '優木せつ菜' ],
  [ '上原歩夢', 'エマ・ヴェルデ' ],
  [ '上原歩夢', '天王寺璃奈' ],
  [ '上原歩夢', '三船栞子' ],
  [ '上原歩夢', 'ミア・テイラー' ],
  [ '上原歩夢', '鐘嵐珠' ],
  [ '中須かすみ', '桜坂しずく' ],
  [ '中須かすみ', '朝香果林' ],
  [ '中須かすみ', '宮下愛' ],
  [ '中須かすみ', '近江彼方' ],
  [ '中須かすみ', '優木せつ菜' ],
  [ '中須かすみ', 'エマ・ヴェルデ' ],
  [ '中須かすみ', '天王寺璃奈' ],
  [ '中須かすみ', '三船栞子' ],
  [ '中須かすみ', 'ミア・テイラー' ],
  [ '中須かすみ', '鐘嵐珠' ],
  [ '桜坂しずく', '朝香果林' ],
  [ '桜坂しずく', '宮下愛' ],
  [ '桜坂しずく', '近江彼方' ],
  [ '桜坂しずく', '優木せつ菜' ],
  [ '桜坂しずく', 'エマ・ヴェルデ' ],
  [ '桜坂しずく', '天王寺璃奈' ],
  [ '桜坂しずく', '三船栞子' ],
  [ '桜坂しずく', 'ミア・テイラー' ],
  [ '桜坂しずく', '鐘嵐珠' ],
  [ '朝香果林', '宮下愛' ],
  [ '朝香果林', '近江彼方' ],
  [ '朝香果林', '優木せつ菜' ],
  [ '朝香果林', 'エマ・ヴェルデ' ],
  [ '朝香果林', '天王寺璃奈' ],
  [ '朝香果林', '三船栞子' ],
  [ '朝香果林', 'ミア・テイラー' ],
  [ '朝香果林', '鐘嵐珠' ],
  [ '宮下愛', '近江彼方' ],
  [ '宮下愛', '優木せつ菜' ],
  [ '宮下愛', 'エマ・ヴェルデ' ],
  [ '宮下愛', '天王寺璃奈' ],
  [ '宮下愛', '三船栞子' ],
  [ '宮下愛', 'ミア・テイラー' ],
  [ '宮下愛', '鐘嵐珠' ],
  [ '近江彼方', '優木せつ菜' ],
  [ '近江彼方', 'エマ・ヴェルデ' ],
  [ '近江彼方', '天王寺璃奈' ],
  [ '近江彼方', '三船栞子' ],
  [ '近江彼方', 'ミア・テイラー' ],
  [ '近江彼方', '鐘嵐珠' ],
  [ '優木せつ菜', 'エマ・ヴェルデ' ],
  [ '優木せつ菜', '天王寺璃奈' ],
  [ '優木せつ菜', '三船栞子' ],
  [ '優木せつ菜', 'ミア・テイラー' ],
  [ '優木せつ菜', '鐘嵐珠' ],
  [ 'エマ・ヴェルデ', '天王寺璃奈' ],
  [ 'エマ・ヴェルデ', '三船栞子' ],
  [ 'エマ・ヴェルデ', 'ミア・テイラー' ],
  [ 'エマ・ヴェルデ', '鐘嵐珠' ],
  [ '天王寺璃奈', '三船栞子' ],
  [ '天王寺璃奈', 'ミア・テイラー' ],
  [ '天王寺璃奈', '鐘嵐珠' ],
  [ '三船栞子', 'ミア・テイラー' ],
  [ '三船栞子', '鐘嵐珠' ],
  [ 'ミア・テイラー', '鐘嵐珠' ]
]

あ^~

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?