0
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?

More than 3 years have passed since last update.

【Javascript】Spread Operator(スプレッド構文)を試してみた

Last updated at Posted at 2021-05-17

初めに

配列やオブジェクトで使うと便利なスプレッド構文について学習した内容をまとめてみました。

スプレッド構文とは

MDNの公式ドキュメントには以下のように解説されています。

スプレッド構文 (...) を使うと、配列式や文字列などの反復可能オブジェクトを、0 個以上の引数 (関数呼び出しの場合) や要素 (配列リテラルの場合) を期待された場所で展開したり、オブジェクト式を、0 個以上のキーと値のペア (オブジェクトリテラルの場合) を期待された場所で展開したりすることができます。

要するに配列や文字列を必要な場所にspread(展開する)する構文です。

なぜ使うのか

理由はシンプルで、コードを短く書けるからです。数字の配列numArrがあったとします。
これに1,2,3の数字が入っている配列に、numArrの数字を追加しnewNumArrを作るとします。

const numArr = [4, 5, 6];
const newNumArr = [1, 2, 3, numArr[0], numArr[1], numArr[2]];
// [1, 2, 3, 4, 5, 6]

numArrの中身を取り出すために、numArr[0]からnumArr[2]までをいちいち書かなければなりません。

スプレッド構文を使うと簡単で短く書けます。

const numArr = [4, 5, 6];
const newNumArr = [1, 2, 3, ...numArr];
// [1, 2, 3, 4, 5, 6]

#配列でスプレッド構文を使ってみる

parkというオブジェクトのflowersという配列を追加し、新たにnewFlowersという配列を生成します。

const park = {
  name: "flower park",
  location: "東京都新宿区高田馬場3丁目",
  trees: ["ヒノキ", "", "", "", "イチョウ"],
  flowers: ["薔薇", "", "朝顔", "ひまわり"],
  facilities: ["すべり台", "ブランコ", "トイレ", "噴水"],
  people: ["安田", "上村", ["鈴木", "福岡"]],
};

const newFlowers = ["", "水仙", "紫陽花", ...park.flowers];
console.log(newFlowers);

parkからflowersの中身を簡単に追加できちゃいます。
スクリーンショット 2021-05-17 8.07.50.png

今度はtreesのコピー配列を生成してみました。

const newTrees = [...park.trees];
console.log(newTrees);

配列treesのコピーができました。
スクリーンショット 2021-05-17 8.12.15.png

2つの配列を結合してみます。

const plants = [...park.trees, ...park.flowers];
console.log(plants);

スクリーンショット 2021-05-17 8.17.28.png

文字列でスプレッド構文を使ってみる

文字列が入っているlocationをスプレッドしてみると、一文字ずつ表示されました。配列として"2","番"を追加してみると結果は配列で各文字が配列の要素になっています。

const park = {
  name: "flower park",
  location: "東京都新宿区高田馬場3丁目",
   //中略
};

console.log(...park.location);     //一文字ずつ出力される
const letters = [...park.location, "2", ""];   
console.log(letters);     //各文字が配列の要素として表示される

#関数の呼び出しでスプレッド構文を使う
parkオブジェクトに新たにsumPriceという関数を定義します。x,y,zという3つの引数を取り、合計をコンソールに表示します。

const park = {
 //中略
  sumPrice: function (x, y, z) {
    const sum = x + y + z;
    console.log(sum);
  },
};

スプレッドを使わないケースと使うケースを比べてみました。

park.sumPrice(prices[0], prices[1], prices[2]);
park.sumPrice(...prices);      //スプレッド構文を使った場合

結果は同じ4500。
スクリーンショット 2021-05-17 9.01.26.png
スプレッドを使った場合、シンプルで分かりやすいです。

#オブジェクトでスプレッド構文を使ってみる
parkオブジェクトのコピーしたparkCopy作ってみます。

const park = {
  name: "flower park",
  location: "東京都新宿区高田馬場3丁目",
  trees: ["ヒノキ", "", "", "", "イチョウ"],
  flowers: ["薔薇", "", "朝顔", "ひまわり"],
  facilities: ["すべり台", "ブランコ", "トイレ", "噴水"],
  people: ["安田", "上村", ["鈴木", "福岡"]],
  sumPrice: function (x, y, z) {
    const sum = x + y + z;
    console.log(sum);
  },
};

const parkCopy = { ...park };    //parkオブジェクトのスプレッド
console.log(parkCopy);

parkオブジェクトの中身がparkCopyの{ }内に展開されています。このようにしてコピーを簡単に作れます。
スクリーンショット 2021-05-17 9.06.58.png
parkの中身を追加することもできます。

const newPark = { area: 4000, ...park, fee: "free" };   //parkオブジェクトにareaとfeeを追加
console.log(newPark);

スクリーンショット 2021-05-17 9.12.53.png

#参考サイト
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Spread_syntax

0
0
0

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
0
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?