JavaScript のクイズツイート
こんなツイートが流れてきた。
【ゆめみからの挑戦状★第3弾】
— 株式会社ゆめみ | YUMEMI (@yumemiinc) August 18, 2022
好評につきシリーズ化するやで~☺
【JSクイズ】
/*ここに回答を書いてください*/ の部分を埋めてくださいやで!
【回答方法】
引用RTで回答お願いしますやで!
【正解発表】
8/25(木)
【出題者】
無職やめ太郎(本名)@Yametaro1983#ゆめみからの挑戦状 pic.twitter.com/5WbLMkitwL
とりあえず思いつきでやってみようと思って自分は以下のようなコードを書いた。
const array2 = array1.flatMap(n => n % 2 === 0 ? [n, n] : [n, n, n])
— tagucch (@tagucch) August 18, 2022
しか思いつかなかった https://t.co/doPWJosHSH
そのあとに引用 RT されているツイートを色々見てみて学びがあった。
n % 2 === 0 の部分
結果が 0 なら必然的に false になるので、 === 0
の部分がなくても書ける。
if 文の条件分岐で falsy な値をあまり使いたくないという思いがあり↑のように === 0
みたいな書き方で分岐させていたので抜けてました(言い訳)
Array.fill
[n, n, n]
みたいに書くのって絶対冗長だし Array(3)
したあとに push みたいなことできないかなと思っていたら、以下のような書き方があった。
const array2 = array1.flatMap(n => Array(n % 2 + 2).fill(n))
Array.fill(n)
で配列の要素をすべて n にする。
これがぱっと思いつけるようになりたい……。
Array.from
Array.fromの第二引数でfillっぽいことができたりするな
— berlysia💭 (@berlysia) August 18, 2022
.flatMap(n=>Array.from(Array(n%2+2),()=>n)) https://t.co/AK4hbLC8aI
Array.from() - JavaScript | MDN
Array.from() メソッドは、配列のようなオブジェクトや反復可能オブジェクトから、浅くコピーされた新しい Array インスタンスを生成します。
なるほど。
Array.from
の第一引数に Array(n % 2 + 2)
を入れて、第二引数(第一引数のすべての要素に適用される関数)で単に n を返す。
これは全然思いつかない。そもそも Array.from
を使っているのを初めて見た気がする(普段使ったことがない)