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() で簡単に連番を作れる