23
23

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 5 years have passed since last update.

Javascript 二次元配列の追加、結合

Posted at

二次元配列の操作で

  • 二次元配列に二次元配列を追加(破壊的/push)
  • 二次元配列と二次元配列を結合(非破壊的/concat)

する方法がわからなかったので関数を作成した。

縦方向と横方向に追加、結合が可能。

追加(破壊的/push)

一次元配列に値をpushする際と同様に、二次元配列に二次元配列を破壊的に追加する。

[第3引数]
axis≠1: 縦方向に追加
axis=1: 横方向に追加

追加(破壊的/push)
function pushTwoDimensionalArray(array1, array2, axis){
  if(axis != 1) axis = 0;
  if(axis == 0){  // 縦方向の追加
    for(var i = 0; i < array2.length; i++){
      array1.push(array2[i]);
    }
  }
  else{  // 横方向の追加
    for(var i = 0; i < array1.length; i++){
      Array.prototype.push.apply(array1[i], array2[i]);
    }
  }
}

結合(非破壊的/concat)

一次元配列に値をconcatする際と同様に、二次元配列と二次元配列を非破壊的に結合する。

[第3引数]
axis≠1: 縦方向に結合
axis=1: 横方向に結合

結合(非破壊的/concat)
function concatTwoDimensionalArray(array1, array2, axis){
  if(axis != 1) axis = 0;
  var array3 = [];
  if(axis == 0){  // 縦方向の結合
    array3 = array1.slice();
    for(var i = 0; i < array2.length; i++){
      array3.push(array2[i]);
    }
  }
  else{  // 横方向の結合
    for(var i = 0; i < array1.length; i++){
      array3[i] = array1[i].concat(array2[i]);
    }
  }
  return array3;
}

縦方向の追加(破壊的/push)

使用例
var arr1 = [['A1','B1','C1'],['A2','B2','C2'],['A3','B3','C3']];
var arr2 = [['A4','B4','C4'],['A5','B5','C5']];

pushTwoDimensionalArray(arr1, arr2);

pushTwoDimensionalArray()実行後のarr1は下図のarr1(push後)のようになる。
第1引数のarr1の下側に、第2引数のarr2を追加(push)する。

push_axis=0.png

横方向の追加(破壊的/push)

使用例
var arr3 = [['A1','B1','C1'],['A2','B2','C2'],['A3','B3','C3']];
var arr4 = [['D1','E1'],['D2','E2'],['D3','E3']];

pushTwoDimensionalArray(arr3, arr4, 1);

横方向に追加する場合は第3引数(axis)を1に指定する。
pushTwoDimensionalArray()実行後のarr3は下図のarr3(push後)のようになる。
第1引数のarr3の右側に、第2引数のarr4を追加(push)する。

push_axis=1.png

縦方向の結合(非破壊的/concat)

使用例
var arr1 = [['A1','B1','C1'],['A2','B2','C2'],['A3','B3','C3']];
var arr2 = [['A4','B4','C4'],['A5','B5','C5']];

var arr12 = concatTwoDimensionalArray(arr1, arr2);

非破壊的に配列と配列を結合する場合はconcatTwoDimensionalArray()を使用する。

concat_axis=0.png

横方向の結合(非破壊的/concat)

使用例
var arr3 = [['A1','B1','C1'],['A2','B2','C2'],['A3','B3','C3']];
var arr4 = [['D1','E1'],['D2','E2'],['D3','E3']];

var arr34 = concatTwoDimensionalArray(arr3, arr4, 1);

横方向に結合する場合はpushと同様に第3引数(axis)を1に指定する。

concat_axis=1.png

まとめ

pythonのpandasのように二次元配列の追加、結合する関数を作成して使用例をまとめた。
使用例と図をまとめると直感的でわかりやすい。

参考

Python pandas 図でみる データ連結 / 結合処理

23
23
5

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
23
23

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?