【JavaScript】1行で書ける便利テクニック10選

【JavaScript】1行で書ける便利テクニック10選 JavaScript

JavaScriptは、少し工夫すると処理を1行でスッキリ書けます。よく使う便利な1行テクニックを10個、厳選して紹介します。

この記事のポイント:1行化は「短く書くこと」より「意図が伝わること」を優先しましょう。ここで紹介する ??・スプレッド・配列メソッドなどは、短くても読みやすさを損なわない定番テクニックです。
スポンサーリンク

三項演算子で条件分岐を1行に

JavaScript
const result = score >= 80 ? '合格' : '不合格';

シンプルな if-else は三項演算子でまとめられます。条件が単純なときに向いています。

デフォルト値を設定する(?? がおすすめ)

JavaScript
const username = inputName ?? 'ゲスト';   // null / undefined のとき 'ゲスト'
const old      = inputName || 'ゲスト';   // 0 や '' も 'ゲスト' になる
|| と ?? の違い:||0 や空文字 "" も「無し」と判定して右側を使います。0 や空文字を有効な値として残したいなら、null / undefined だけを対象にする ??(Null合体演算子)を使いましょう。

スプレッド構文で配列をコピー

JavaScript
const copy = [...originalArray];

参照ではなく新しい配列を作れます(浅いコピー)。オブジェクトの複製も { ...obj } で同様に書けます。

filter()で条件に合う要素を抽出

JavaScript
const adults = users.filter((user) => user.age >= 18);

条件に合う要素だけを絞り込みます。最初の1件だけなら find() が便利です(配列から条件に合う要素を取り出す方法)。

map()で配列を変換

JavaScript
const names = users.map((user) => user.name);

各要素を別の形に変換します。集計の reduce とあわせてmap・filter・reduceの使い方で詳しく解説しています。

includes()で存在チェック

JavaScript
const hasItem = items.includes('りんご');

配列や文字列に特定の要素が含まれるかを、true / false で直感的に判定できます。

アロー関数で即時実行(IIFE)

JavaScript
(() => console.log('Hello!'))();

その場で1回だけ実行したい小さな処理に。IIFE(即時実行関数式)をアロー関数で短く書けます。

Object.keys()でキー一覧を取得

JavaScript
const keys = Object.keys(user);

オブジェクトのプロパティ名を配列で取得します。値の一覧は Object.values()、両方なら Object.entries() です。

文字列を数値に変換する

JavaScript
const num = +'123';      // 123(単項プラスで変換)
const num2 = Number('123'); // 123(読みやすさ重視ならこちら)

+ を付けるだけで数値化できます。ただし +''0+'12px'NaN になる点に注意します。詳しくは文字列を数値に変換する方法を参照してください。

短いループを書く

JavaScript
[...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)
structuredCloneが便利:スプレッド({ ...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)

Q1行で書ける便利な処理にはどんなものがありますか?
A配列の最大値(Math.max(...arr))、重複除去([...new Set(arr)])、オブジェクトのコピー({ ...obj })、デフォルト値(value ?? "既定")などが1行で書けます。
Q1行コードと可読性はどう両立しますか?
A「1行で書けること」より「意図が伝わること」を優先してください。短すぎて分かりにくいより、分かりやすい2〜3行のほうが保守しやすいことも多いです。チームの規約に沿った書き方を心がけましょう。
Q|| と ?? はどう使い分けますか?
A||0 や空文字も「無し」とみなして右側を使います。0 や空文字を有効な値として残したいなら、null / undefined だけを対象にする ?? を使います。
QOptional Chaining(?.)はどう使いますか?
Aobj?.a?.b?.c のように書くと、途中が null / undefined でもエラーにならず undefined を返します。?? と組み合わせるとobj?.a ?? "既定" のように安全に1行で書けます。

まとめ

JavaScriptの1行テクニックを使うと、コードが短くシンプルになります。三項演算子・??・スプレッド・配列メソッドなどは、短くても読みやすい定番です。

ただし、すべてを無理に1行にまとめると逆に読みにくくなります。可読性とのバランスを考えながら、意図が伝わる書き方を選びましょう。