JavaScriptは、少し工夫すると処理を1行でスッキリ書けます。よく使う便利な1行テクニックを10個、厳選して紹介します。
??・スプレッド・配列メソッドなどは、短くても読みやすさを損なわない定番テクニックです。三項演算子で条件分岐を1行に
const result = score >= 80 ? '合格' : '不合格';
シンプルな if-else は三項演算子でまとめられます。条件が単純なときに向いています。
デフォルト値を設定する(?? がおすすめ)
const username = inputName ?? 'ゲスト'; // null / undefined のとき 'ゲスト' const old = inputName || 'ゲスト'; // 0 や '' も 'ゲスト' になる
|| は 0 や空文字 "" も「無し」と判定して右側を使います。0 や空文字を有効な値として残したいなら、null / undefined だけを対象にする ??(Null合体演算子)を使いましょう。スプレッド構文で配列をコピー
const copy = [...originalArray];
参照ではなく新しい配列を作れます(浅いコピー)。オブジェクトの複製も { ...obj } で同様に書けます。
filter()で条件に合う要素を抽出
const adults = users.filter((user) => user.age >= 18);
条件に合う要素だけを絞り込みます。最初の1件だけなら find() が便利です(配列から条件に合う要素を取り出す方法)。
map()で配列を変換
const names = users.map((user) => user.name);
各要素を別の形に変換します。集計の reduce とあわせてmap・filter・reduceの使い方で詳しく解説しています。
includes()で存在チェック
const hasItem = items.includes('りんご');
配列や文字列に特定の要素が含まれるかを、true / false で直感的に判定できます。
アロー関数で即時実行(IIFE)
(() => console.log('Hello!'))();
その場で1回だけ実行したい小さな処理に。IIFE(即時実行関数式)をアロー関数で短く書けます。
Object.keys()でキー一覧を取得
const keys = Object.keys(user);
オブジェクトのプロパティ名を配列で取得します。値の一覧は Object.values()、両方なら Object.entries() です。
文字列を数値に変換する
const num = +'123'; // 123(単項プラスで変換)
const num2 = Number('123'); // 123(読みやすさ重視ならこちら)
+ を付けるだけで数値化できます。ただし +'' は 0、+'12px' は NaN になる点に注意します。詳しくは文字列を数値に変換する方法を参照してください。
短いループを書く
[...Array(5)].forEach((_, i) => console.log(i)); // 0〜4
for を書かずに、決まった回数のループを作れます。Array.from({ length: 5 }, (_, i) => i) でも同じことができます。
おまけ:さらに便利な1行
定番の10個に加えて、知っておくと差がつくモダンな1行も紹介します。
・重複を除去:
[...new Set(arr)]・最大値:
Math.max(...arr)・末尾の要素:
arr.at(-1)(arr[arr.length - 1] より簡潔)・深いコピー:
structuredClone(obj)(JSON.parse(JSON.stringify(obj)) の置き換え)・未設定なら代入:
x ??= 初期値(論理代入。||= / &&= もあり)・ゼロ埋め:
String(5).padStart(2, "0") → "05"・配列→オブジェクト:
Object.fromEntries(entries)・安全なプロパティアクセス:
obj?.a?.b(Optional Chaining){ ...obj })は浅いコピーで、ネストした中身は共有されたままです。入れ子のオブジェクトや配列まで丸ごと複製したいときは structuredClone(obj) を使います。(関数や DOM ノードはコピーできない点には注意)1行テクニック早見表
よく使う1行をまとめました。コピーして使ってください。
| やりたいこと | 1行コード |
|---|---|
| 条件で値を選ぶ | score >= 80 ? "合格" : "不合格" |
| デフォルト値(null/undefined) | inputName ?? "ゲスト" |
| 配列を浅くコピー | [...arr] |
| オブジェクトを深くコピー | structuredClone(obj) |
| 条件で絞り込む | arr.filter(x => x.age >= 18) |
| 各要素を変換 | arr.map(x => x.name) |
| 含むか判定 | arr.includes("値") |
| 重複を除去 | [...new Set(arr)] |
| 最大値 | Math.max(...arr) |
| 末尾の要素 | arr.at(-1) |
| キー一覧 | Object.keys(obj) |
| 配列→オブジェクト | Object.fromEntries(entries) |
| 文字列→数値 | Number("123") |
| ゼロ埋め | String(5).padStart(2, "0") |
| 未設定なら代入 | x ??= 初期値 |
| 安全なアクセス | obj?.a?.b |
よくある質問(FAQ)
Math.max(...arr))、重複除去([...new Set(arr)])、オブジェクトのコピー({ ...obj })、デフォルト値(value ?? "既定")などが1行で書けます。|| は 0 や空文字も「無し」とみなして右側を使います。0 や空文字を有効な値として残したいなら、null / undefined だけを対象にする ?? を使います。obj?.a?.b?.c のように書くと、途中が null / undefined でもエラーにならず undefined を返します。?? と組み合わせるとobj?.a ?? "既定" のように安全に1行で書けます。まとめ
JavaScriptの1行テクニックを使うと、コードが短くシンプルになります。三項演算子・??・スプレッド・配列メソッドなどは、短くても読みやすい定番です。
ただし、すべてを無理に1行にまとめると逆に読みにくくなります。可読性とのバランスを考えながら、意図が伝わる書き方を選びましょう。

