🏹

配列内のすべての値の真偽値をチェックする方法

2023/11/10に公開1

はじめに

Javascriptでは全ての値はtruthyかfalsyのいずれかです。実際にコードを書いていく中で、条件分岐を書いたりすることは多いので、重要なことです。今回この記事では、Javascriptの配列内で、値がtruthyかfalsyかをチェックする方法に関して解説していきます。

truthyとfalsy

先にtruthyとfalsyに関して説明します。Boolean関数で値を真偽値に変換した時に、falseが返ってくる値のことをfalsy、trueが返ってくることをtruthyと呼びます。undefined、null、0、-0、NaN、0n、空文字はFalsyです。それ以外はtruthyです。

それでは配列の値の真偽値をコードで確認しながら見ていきましょう。
・everyメソッドを使う。
everyメソッドは配列の全ての要素が指定された特定の条件を満たすどうかを確認します。返り値としてはブール値を渡します。

const array1 = [2, '文字', true, {}];
const areAllTruthy = array1.every(value => Boolean(value));
console.log(areAllTruthy); //出力: true

const array2 = ["", '文字', true, {}];
const areAllTruthy = array2.every(value => Boolean(value));
console.log(areAllTruthy); //出力: false

・someメソッドを使う
someメソッドは配列のいずれかの要素が指定された条件を満たすかどうかを確認します。返り値としてはブール値を渡します。

const array = ["", '文字', false, NaN];
const isAnyTruthy = array.some(value => Boolean(value));
console.log(isAnyTruthy); //出力: true

おわりに

今回は配列内の値がtruthyかfalsyかを確認する方法についてまとめました。これらの方法を使用することで、配列内の値に基づいた条件分岐などが手軽に行えるようになります。最後まで読んでいただきありがとうございました。

参考資料

https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Boolean
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/every
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/some

Discussion

nap5nap5

少し関連して、ぼくも真偽値の振り分けにチャレンジしてみました。

demo code.

https://codesandbox.io/p/sandbox/objective-snowflake-j2ym7f?file=%2Fsrc%2Findex.test.ts%3A1%2C1

import { describe, test, expect } from "vitest";
import { sift } from "radash";

describe("Truthy & Falsy", () => {
  const fn = function () { }
  const items = [
    "hello",
    [],
    [1, "2", 3],
    {},
    true,
    4,
    fn,
    { a: 42 },
    "",
    false,
    NaN,
    0n,
    0,
    -0,
    null,
    undefined,
  ];

  test("Truthy -> sift", () => {
    const truthyItems = sift(items);
    expect(truthyItems).toStrictEqual([
      "hello",
      [],
      [1, "2", 3],
      {},
      true,
      4,
      fn,
      { a: 42 },
    ]);
  });

  test("Truthy -> Boolean", () => {
    const truthyItems = items.filter((item) => Boolean(item));
    expect(truthyItems).toStrictEqual([
      "hello",
      [],
      [1, "2", 3],
      {},
      true,
      4,
      fn,
      { a: 42 },
    ]);
  });


  test("Truthy -> shorthand", () => {
    const falsyItems = items.filter((item) => !!item);
    expect(falsyItems).toStrictEqual([
      "hello",
      [],
      [1, "2", 3],
      {},
      true,
      4,
      fn,
      { a: 42 },
    ]);
  });

  test("Falsy -> shorthand", () => {
    const falsyItems = items.filter((item) => !item);
    expect(falsyItems).toStrictEqual([
      "",
      false,
      NaN,
      0n,
      0,
      -0,
      null,
      undefined,
    ]);
  });

  test("Falsy -> !Boolean", () => {
    const falsyItems = items.filter((item) => !Boolean(item));
    expect(falsyItems).toStrictEqual([
      "",
      false,
      NaN,
      0n,
      0,
      -0,
      null,
      undefined,
    ]);
  });

  test("Complete", () => {
    const truthyItems = sift(items);
    const falsyItems = items.filter((item) => !item);
    expect([...truthyItems, ...falsyItems]).toStrictEqual(items);
  });
});