配列同士を連結して新しい配列を返すconcat()メソッドを使ってみます。
サンプルコード
まずはconcat()メソッドを簡単に試してみます。
JavaScript
var arr1 = ['はるか', 'かなた']; var arr2 = ['クレア', 'エミリ']; // 配列の結合 var arr3 = arr1.concat(arr2); console.log(arr3); // ["はるか", "かなた", "クレア", "エミリ"] arr1.push('なるみ'); console.log(arr1); // ["はるか", "かなた", "なるみ"] console.log(arr3); // ["はるか", "かなた", "クレア", "エミリ"]
2つの配列を連結して、新しい配列を生成しました。
8~10行目で試している通り、新しく配列を作成しているので元の配列を変更しても影響されません。
concat()のデモページ
array1.concat(value1[, value2, …,]) | array1にvalueを連結して新しい配列を返す。 valueは配列以外の場合もある。 |
---|
連結する配列は3つ以上でも可能です。
JavaScript
var arr1 = ['はるか', 'かなた']; var arr2 = ['クレア', 'エミリ']; var arr3 = ['なるみ', 'あやさ']; var arr4 = arr1.concat(arr2, arr3); console.log(arr4); // ["はるか", "かなた", "クレア", "エミリ", "なるみ", "あやさ"]
連結に文字列を指定した場合、その文字列が要素として追加されます。
JavaScript
var arr1 = ['はるか', 'かなた']; var str = 'なるみ'; var arr2 = arr1.concat(str); console.log(arr2); // ["はるか", "かなた", "なるみ"]
最初のデモで試したように新しい配列を作成する形なので、引数を指定しないで参照渡しでない形でのコピーでもよく使われます。
JavaScript
var arr1 = ['はるか', 'かなた']; var arr2 = arr1.concat(); console.log(arr2); // ["はるか", "かなた"] arr1.push('なるみ'); console.log(arr1); // ["はるか", "かなた", "なるみ"] console.log(arr2); // ["はるか", "かなた"]
注意点
配列内に配列が入れ子になっている場合、入れ子の配列は参照渡しになります。
JavaScript
var arr1 = [ ['はるか', 'かなた'] ]; var arr2 = [ ['クレア', 'エミリ'] ]; var arr3 = arr1.concat(arr2); console.log(arr3); // [["はるか", "かなた"], ["クレア", "エミリ"]] arr1[0].push('なるみ'); console.log(arr1); // [["はるか", "かなた", "なるみ"]] console.log(arr3); // [["はるか", "かなた", "なるみ"], ["クレア", "エミリ"]]
連想配列が入れ子になっている場合も同様です。
JavaScript
var arr1 = [ { name: 'はるか' }, { name: 'かなた' } ]; var arr2 = [ { name: 'クレア' }, { name: 'エミリ' } ]; var arr3 = arr1.concat(arr2); console.log(arr3); // [{name: 'はるか'}, {name: 'かなた'}, {name: 'クレア'}, {name: 'エミリ'}] arr1[0]['height'] = 172; console.log(arr1); // [{name: 'はるか', height: 172}, {name: 'かなた'}] console.log(arr3); // [{name: 'はるか', height: 172}, {name: 'かなた'}, {name: 'クレア'}, {name: 'エミリ'}]
4つ目のデモで紹介した「参照渡しでない形でのコピー」でも同様で、配列が入れ子になっている場合は参照渡しになります。
JavaScript
var arr1 = [ ['はるか', 'かなた'] ]; var arr2 = arr1.concat(); console.log(arr2); // [["はるか", "かなた"]] arr1[0].push('なるみ'); console.log(arr1); // [["はるか", "かなた", "なるみ"]] console.log(arr2); // [["はるか", "かなた", "なるみ"]]
連想配列も同様です。
JavaScript
var arr1 = [ { name: 'はるか' }, { name: 'かなた' } ]; var arr2 = arr1.concat(); console.log(arr2); // [{name: 'はるか'}, {name: 'かなた'}] arr1[0]['height'] = 172; console.log(arr1); // [{name: 'はるか', height: 172}, {name: 'かなた'}] console.log(arr2); // [{name: 'はるか', height: 172}, {name: 'かなた'}]
【参考サイト】
コメントが承認されるまで時間がかかります。