JavaScriptで必ず覚えるべき1行で作れる7つの便利関数

1. 配列をシャッフルする

JavaScript
const shuffle = (arr) => arr.reduceRight((acc, _, i) => { const j = Math.floor(Math.random() * (i + 1)); [acc[i], acc[j]] = [acc[j], acc[i]]; return acc }, [...arr])

const data = ['A', 'B', 'C']

console.log(shuffle(data))
// 例: ['B', 'C', 'A']

※ sort(() => Math.random() - 0.5) で作ってはいけません。

2. 配列から重複を削除する

JavaScript
const uniq = (arr) => [...new Set(arr)]

const data = ['A', 'B', 'B', 'C']

console.log(uniq(data))
// ['A', 'B', 'C']

3. 配列からランダムに1要素を取り出す

JavaScript
const sample = (arr) => arr[Math.floor(Math.random() * arr.length)]

const data = ['A', 'B', 'C']

console.log(sample(data))
// 例: ['B']

4. 数値を範囲内に収める(0〜100に制限する例)

JavaScript
const clamp = (val, min, max) => Math.min(Math.max(val, min), max)

console.log(clamp(150, 0, 100)) // 100
console.log(clamp(-20, 0, 100)) // 0
console.log(clamp(45, 0, 100)) // 45

5. 指定したミリ秒だけ処理を一時停止

JavaScript
const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms))

6. Cookieをオブジェクトとして保存する

JavaScript
// Cookieをオブジェクトとして保存する(保存可能な最大日数は400日(34560000))
const setCookie = (key, value, maxAge = 34560000, path = '/') => document.cookie = `${encodeURIComponent(key)}=${encodeURIComponent(value)}; Max-Age=${maxAge}; Path=${path}`

7. Cookieをオブジェクトとして取得する

JavaScript
const getCookies = () => Object.fromEntries(document.cookie.split('; ').map((c) => c.split('=')))

lodashにも同様の処理はある

1.〜4.に関してはlodashにも同様の処理のメソッドが存在します。

  • _.shuffle(collection)
  • _.uniq(array)
  • _.sample(collection)
  • _.clamp(number, [lower], upper)

しかし、lodashが使用可能とは限らないですし、カスタマイズした関数が必要な場合もあります。

そのため、これらの基本的な処理は自分でも書けるように、書き方を覚えておくことを推奨します。