6
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

javascriptのよく使う配列処理と使える小技

Posted at

javascriptの配列処理って結構奥が深いですよね。
今回は、javascriptの配列処理で使えるいくつかのパターンと小技について紹介していきます。
実行内容は、jsonからデータを取得した際に使える内容となっており、今回使うjsonデータのサンプルは以下です。
このサンプルを用いて、javascriptの配列処理の説明をしていこうと思います。

{
  "users": [
    {
      "id": "1234",
      "name": "taro",
      "frends": [
        {
          "id": "2222",
          "name": "ziro"
        }
      ]
    },
    {
      "id": "4444",
      "name": "hana",
      "frends": [
        {
          "id": "6666",
          "name": "ken"
        }
      ]
    }
  ]
}

配列操作で定数名:dataを使用するので以下のように定数を作成しておきます。

    const json = 
    {
      "users": [
        {
          "id": "1234",
          "name": "taro",
          "frends": [
            {
              "id": "2222",
              "name": "ziro"
            }
          ]
        },
        {
          "id": "4444",
          "name": "hana",
          "frends": [
            {
              "id": "6666",
              "name": "ken"
            }
          ]
        }
      ]
    }

    const data = json.users;

配列処理1:find

条件に一致するデータを1件返します。

サンプル:

    const findData = data.find(item => {
      return item.id === "1234";
    });
    console.log('find', findData);
    // 実行結果
    {
      id: "1234",
      name: "taro",
      frends: [
        id: "2222",
        name: "ziro"
      ]
    }

注意点:
条件に一致する値を全て取り出すのではなく、最初にヒットした値のみを取り出します。
そのため、以下のようにidが"1234"のデータが2件あったとしても、取得される値は、最初にヒットするid="1234"、name=taroだけで、hanaのデータは取得されません。

{
  "users": [
    {
      "id": "1234",
      "name": "taro"
    },
    {
      "id": "1234",
      "name": "hana"
    }
  ]
}

配列処理2:filter

条件に一致するデータを全て返します。

サンプル:

    const filterData = data.filter(item => {
      return item.id === "1234";
    });
    console.log('filter', filterData);
    // 実行結果
    {
      id: "1234",
      name: "taro",
      frends: [
        id: "2222",
        name: "ziro"
      ]
    }

ちなみに以下のように一行でも書けます。

    const filterData = data.filter(item => item.id === "1234");

補足:
findだと最初にヒットするデータ1件だけ取得しますが、filterの場合は条件に一致するデータ全て取得できます。仮にid="1234"のデータが2件以上あれば、全て取得できますよってことです。

配列処理3:forEach

配列の要素を順番に取り出していきます。

    data.forEach(item => {
      console.log(item);
    });
    // 実行結果
    1回目:{id: '1234', name: 'taro'}
    2回目:{id: '4444', name: 'hana'}

配列処理4:map

指定した条件をもとに新しい配列を作成します。

    const mapData = data.map(item => {
      return item.id;
    });
    console.log('map', mapData); // ["1234", "4444"]

こちらも一行で記載できます。

    const mapData2 = data.map(item => item.id);
    console.log('map2', mapData2); // ["1234", "4444"]

指定したオブジェクトのキーで新しい配列の作成も可能です。

    const mapData3 = data.map(item => {
      return {
        id: item.id,
        name: item.name
      }
    });
    console.log('map3', mapData3);
    // 実行結果
    {id: '1234', name: 'taro'}
    {id: '4444', name: 'hana'}

小技1:includes

配列の要素に一致する値があればtrueを返し、一致するデータがなければfalseを返します。

    const date = ["0201", "0202", "0203"];
    const isDate = date.includes("0201");
    console.log('isDate', isDate); //true
    const date = ["0201", "0202", "0203"];
    const isDate = date.includes("0204");
    console.log('isDate', isDate); // false

小技2:push

配列に要素を追加します。

    const pushData = ["taro", "hana"];
    pushData.push("ken");
    console.log('pushData', pushData); // ["taro", "hana", "ken"]

jsonデータに新たにデータを追加する場合は、以下のように書けます。

    data.push({
      id: "3333",
      name: "hiro",
      frends: [
        {
          id: "7777",
          name: "kaori"
        }
      ]
    });
    console.log('data', data);
    // 実行結果
    {id: '1234', name: 'taro', frends: [{...}]}
    {id: '4444', name: 'hana', frends: [{...}]}
    {id: '3333', name: 'hiro', frends: [{...}]}

小技3:length

配列の要素数を取得します。

    const length = data.length;
    console.log('length', length); // 2

小技4:配列の先頭または末尾を削除

配列の先頭要素を削除する場合:

    const array1 = ["taro", "hana", "ken"];
    array1.shift();
    console.log('array', array1); // ["hana", "ken"]

要素の先頭のtaroが削除されます。

配列の末尾要素を削除する場合:

    const array2 = ["taro", "hana", "ken"];
    array2.pop();
    console.log('array2', array2); // ["taro", "hana"];

要素の末尾kenが削除されます。

小技5:配列から指定要素を削除

filterを使って、指定要素を削除できます。

    const array3 = ["taro", "hana", "ken"];
    const newArray1 = array3.filter(item => item !== "hana");
    console.log('array3', newArray1); // ["taro", "ken"];

実行結果は、hana以外のデータを取得します。

小技6:forEach内で数量計算する

    const sumData = [10, 20, 30];
    let sum = 0;
    sumData.forEach(item => {
      sum += item;
    });
    console.log('sum', sum); // 60
6
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?