1〜10を1行で出力する問題」。最初は for
ループでやったけど、もっとスッキリ書ける方法があった!
この技術メモでは、 Array(10).keys()
を使った最適解をサクッと解説します。
🔍 問題概要
「1 2 3 4 5 6 7 8 9 10
」と出力する。ただし、
- 間に半角スペースを入れる
- 最後に半角スペース+改行を入れる
- 余計な文字や空行はNG
❌ NGコード
for (let i = 1; i <= 10; i++) {
console.log(i + " ");
}
問題点:
-
console.log()
は 自動的に改行を入れる → 1行にならない! - 余計な空行が発生する
✅ OKコード(forループ版)
for (let i = 1; i <= 10; i++){
if(i !== 10){
process.stdout.write(`${i} `);
} else {
process.stdout.write(i + " \n");
}
}
👍 改善ポイント:
-
process.stdout.write()
を使うことで 改行なしの出力 を実現 - 最後の要素だけ スペース+改行を加える処理 を入れる
✅ OKコード(スマートな解法)
console.log([...Array(10).keys()].map(i => i + 1).join(" ") + " ");
解説:
-
Array(10)
→ 長さ10の空の配列 を作成 -
.keys()
→ インデックス(0〜9)を取得 -
map(i => i + 1)
→ 1〜10の配列を作る -
join(" ")
→ 半角スペース区切りの文字列に変換 -
+ " "
→ 最後にスペースを追加して改行を入れる
🎯 おまけ: シンプル版(最後のスペース不要)
console.log([...Array(10).keys()].map(i => i + 1).join(" "));
🚀 まとめ
✅ process.stdout.write()
を使えば改行なしの出力が可能
✅ join(" ")
は「間にスペースを入れて1行にする」時に便利
✅ スプレッド構文 ...
& .keys()
で簡単に連番を作れる