JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

Vanilla JavaScriptで配列をマージする方法 ― ES5とES6の実装例をわかりやすく解説

これまでの記事では、JavaScriptのpush()メソッドを使って配列に要素を追加・削除する方法を学びました。

しかし、既存の配列に「別の配列そのもの」を追加したい場合はどうすればよいのでしょうか。つまり、2つの異なる配列を1つに結合(マージ)したい場合です。

JavaScriptで2つ以上の配列をマージするには、Array.prototype.push.apply()を使用します。

例として、果物かごが2つあるとしましょう。すべての果物を1つのかごにまとめたい――そんなとき、この方法が役立ちます。

ES5での配列のマージ方法

var fruitBasketOne = ["apple", "banana", "grapes"]
var fruitBasketTwo = ["orange", "apricot", "pear"]
Array.prototype.push.apply(fruitBasketOne, fruitBasketTwo)

// 結果:['apple', 'banana', 'grapes', 'orange', 'apricot', 'pear']
console.log(fruitBasketOne)

// 結果:["orange", "apricot", "pear"]
console.log(fruitBasketTwo)

このコードでは、2番目の配列が1番目の配列にマージされます。ここで注意したいのは、2番目の配列fruitBasketTwoはメモリ上にそのまま残るという点です。このメソッドは元の配列を削除しません

ES6のスプレッド構文で配列をマージする

ES6以降では、スプレッド演算子(...)を使うことで、さらにシンプルに記述できます。

let fruitBasketOne = ["apple", "banana", "grapes"]
let fruitBasketTwo = ["orange", "apricot", "pear"]
fruitBasketOne.push(...fruitBasketTwo)

// 結果:['apple', 'banana', 'grapes', 'orange', 'apricot', 'pear']
console.log(fruitBasketOne)

push(...fruitBasketTwo)のように書くだけで、2番目の配列の全要素が展開されて1番目の配列に追加されます。ES5のapply()を使った方法よりも直感的で読みやすいのが魅力です。

ブラウザ互換性について

1つ目のpush.apply()を使う方法は、すべてのモダンブラウザに対応しており、少なくともIE6までさかのぼって動作します。

一方、スプレッド演算子を使う2つ目の方法はモダンブラウザ限定です。ただし、Babelのようなトランスパイラ(プリプロセッサ)を使えば、ES5互換のコードにコンパイルできるため、古いブラウザでも動作させることが可能です。

配列のマージは日常的な開発でよく使われるテクニックです。状況に応じてES5方式とES6方式を使い分けられるようにしておきましょう。

  1. JavaScriptで配列をreduceする方法|reduce()メソッドで配列要素を合計する

    JavaScriptのreduce()メソッドは、配列の各要素を先頭から順に処理し、その結果を1つの値にまとめる(畳み込む)ための配列メソッドです。数値の合計を求めるだけでなく、配列からオブジェクトを組み立てたり、条件に応じてデータを集約したりと、幅広い場面で活用されています。reduce()メソッドの基本構文 { return 戻り値; }, 初期値);accumulator(アキュムレータ):直前のコールバック関数が返した値(累積値)。最初のループでは初期値、または配列の第1要素が代入されます。currentValue:現在処理している配列の要素。初期値:累積値の出発点となる値。省略し

  2. JavaScriptでオブジェクトを含む「配列の配列」をループ処理する方法

    JavaScriptでオブジェクトを含む多次元配列をループするには?JavaScriptでは、オブジェクトを含む配列の配列(入れ子構造の配列)をループ処理する際、forEach()メソッドをネストして使用し、さらにfor...inループで各オブジェクトのプロパティにアクセスするのが一般的な方法です。以下に、具体的な実装例を紹介します。コード例<!DOCTYPE html> <html lang=ja> <head> <meta charset=UTF-8 /> <meta name=viewport content=width=device