複数の配列を連結して新しい配列を生成 - concat

《 初回公開:2023/10/19 , 最終更新:未 》

concatメソッドは複数の配列を連結して新しい配列を生成する。
新しい配列は元の配列のシャローコピー。

構文
array.concat(value1, value2, ..., valueN)
引数 value1, value2, ..., valueN
連結する値。任意の数の引数を指定できる。
連結する値は必ずしも配列でなくてもよい。
戻り値
arrayとvalue1, value2, ..., valueNを連結した新しい配列。

const array = ["a", "b", "c"];
const array1 = ["d", "e", "f"];

// 配列に配列を連結
var result = array.concat(array1);
console.log(JSON.stringify(result));    // ["a","b","c","d","e","f"]

// ネストした配列を連結
const nested_array = [[5, 4], ["x", "y"]];

var result = array.concat(nested_array);
console.log(JSON.stringify(result));    // ["a","b","c",[5,4],["x","y"]]

// プリミティブ値とオブジェクトと配列を連結
const n = 10;
const obj = { name: "愚鈍人", age: 99 };

var result = array.concat(array1, n, obj);
console.log(JSON.stringify(result));    // ["a","b","c","d","e","f",10,{"name":"愚鈍人","age":99}]


// 新しい配列の要素のプロパティを変更
result[7].name = "xxx";

// シャローコピーなので元の配列の要素も変更される
console.log(JSON.stringify(obj.name));  // "xxx"

// 空の配列を使ってプリミティブ値とオブジェクトを連結
var result = [].concat(n, obj);
console.log(JSON.stringify(result));    // [10,{"name":"xxx","age":99}]

array-like objectをconcatしても配列の連結ではなく、通常のオブジェクトの連結になる。

array-like objectの要素を配列として連結するにはWell-Known Symbolsのひとつ、Symbol.isConcatSpreadableプロパティを追加してその値をtrueに設定する。

// array-like objectを連結
const arrayLikeObj = { 0: "d", 1: "e", 2: "f", length: 3 };

var result = array.concat(arrayLikeObj);
console.log(JSON.stringify(result));    // ["a","b","c",{"0":"d","1":"e","2":"f","length":3}]

// array-like objectにWell-Known SymbolsのひとつSymbol.isConcatSpreadableを定義すると
// 配列として連結される
arrayLikeObj[Symbol.isConcatSpreadable] = true;

var result = array.concat(arrayLikeObj);
console.log(JSON.stringify(result));    // ["a","b","c","d","e","f"]
ページのトップへ戻る