Array.prototype.concat()

(標準組み込みオブジェクト > Array > メソッド)
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/concat

配列名.concat(配列)
配列名.concat(配列, 配列, ...)
配列名.concat(値, 値, ...)

Array オブジェクトの concat メソッドを使うと、配列に対して別の配列を結合した新しい配列を取得することができる。配列の最後に引数に指定した配列を結合した新しい配列を返す。引数は省略可能で結合する配列または値を指定し、複数の配列を結合する場合はカンマ(,)のあとに続けて記載する。
concat メソッドを実行しても元の配列は何も変わらない。

let fruit = ['Apple', 'Melon', 'Orange'];
let fruitAll = fruit.concat('Peach', ['Grapes', 'Strawberry']);

console.log(fruit);
>> ["Apple", "Melon", "Orange"]
console.log(fruitAll);
>> ["Apple", "Melon", "Orange", "Peach", "Grapes", "Strawberry"]

let str = 'こんにちは';
let name = 'もりたさん';
let newstr = str.concat(name, 'いい天気ですね');
>> 'こんにちはもりたさんいい天気ですね'

concat メソッドの引数を省略した場合は元の配列を複製したものを戻り値として返すが、複製された配列は元の配列とは別の配列オブジェクトとなる。その為、複製した配列に変更を加えても元の配列には影響しない(逆も同じ)。

let fruit = ['Apple', 'Melon', 'Orange'];
let copyFruit = fruit.concat();

copyFruit[1] = 'Grapes';
console.log(copyFruit);
>> ["Apple", "Grapes", "Orange"]

console.log(fruit);
>> ["Apple", "Melon", "Orange"]

ただし concat メソッドが複製するのは 1 次元の要素まで。元の配列の要素の値として配列が格納されていた場合、その要素が参照する配列は複製された配列の要素も同じ配列を参照する。そのため、どちらかの配列で要素が参照している配列に対して変更を加えると、同じ配列をもう片方の配列の要素にも影響する。

let result = [[78, 92], [68,76]];
let copyResult = result.concat();

copyResult[0][1] = 84;
console.log(copyResult[0]);
>> [78, 84]

console.log(result[0]);
>> [78, 84]
inserted by FC2 system