Paizaの九九表を作る問題で、最初はただのfor
ループでしっかり書いてたんだけど…気づいたらコードがだいぶ長くなってて「うーん…」ってなった…。そこで登場したのがArray.from()
!これを使うと一気にコードがスッキリした!メモを記録するよ。
問題: 九九表を整列して出力せよ!
📌 入力なし
📌 出力例:
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
==========================================
2 | 4 | 6 | 8 | 10 | 12 | 14 | 16 | 18
==========================================
...(省略)...
==========================================
9 | 18 | 27 | 36 | 45 | 54 | 63 | 72 | 81
- 横の数値間では | (半角スペース 2 つとバーティカルライン)、縦の数値間では = で区切って出力
- ただし、数値を出力する際は 2 けたになるよう半角スペース埋めで出力
- また、縦の数値間で = を出力する際は、その上の行と文字数が等しくなるように出力
最初のコード:
for (let i = 1; i <= 9; i++) {
for (let j = 1; j <= 9; j++) {
if (j === 9) {
process.stdout.write(String(i * j).padStart(2, ' ') + "\n");
} else {
process.stdout.write(String(i * j).padStart(2, ' ') + " | ");
}
}
if (i !== 9) {
console.log("==========================================");
}
}
解決法:Array.from()
を使う
for (let i = 1; i <= 9; i++) {
console.log(Array.from({ length: 9 }, (_, j) => String(i * (j + 1)).padStart(2, ' ')).join(" | ")
);
if (i !== 9) console.log("=".repeat(2 * 9 + 3 * 8));
}
💡 改善ポイント
✅ Array.from()
でループを削減!
-
Array.from({ length: 9 }, (_, j) => ...)
で九九の各行を配列に変換 -
(_, j) => i * (j + 1)
で九九の結果を生成 -
.join(" | ")
で簡単に整列
✅ 区切り線の計算もスマートに!
- 2 * 9 = 18 (各数字を2桁分確保)
- 3 * 8 = 24 (区切り
|
は8個) - 18 + 24 = 42 文字の
=
を出力
📌基本構文
str.repeat(count);
-
str
: 繰り返したい文字列。 -
count
: 繰り返す回数。count
が0
以下の場合、空文字列を返します。
✅ 可読性アップ!
-
console.log()
だけで一気に出力できてスッキリ
まとめ
少しでもシンプルに、見やすく、効率的なコードを書くためには、このような小さな工夫が大事!以下のポイントを覚えておこう!
-
Array.from()
で配列を簡単に生成 -
padStart()
で数字を2桁に整列 -
repeat()
で区切り線を簡単に作成
これらを使いこなせれば、コードがスムーズに書けるし、可読性もUP!