1

配列を値に初期化する場合、最初の配列よりも2番目の配列にマージするのに最適な方法はどれですか。

var a = [[0,0,0,0], [0,0,0,0]]; // 2x4
var b = [[1,1], [2,2]];

単純な寸法の場合、次のように使用できます。

var base = [0, 0, 0, 0, 0, 0, 0, 0];
var add = [1, 2, 3, 4];
for (i in add) {
    base[i] = add[i];
}

>>> base
[1, 2, 3, 4, 0, 0, 0, 0]

しかし、2次元または3次元はどうですか?

4

2 に答える 2

2

二次元:

for (i in add) {
    for (j in add[i])
        base[i][j] = add[i][j];
}

三次元:

for (i in add) {
    for (j in add[i])
        for (k in add[i][j])
            base[i][j][k] = add[i][j][k];
}

任意の数の次元について、問題を再帰的に解決できます。

function merge(source, destination){
  if (source[0] instanceof Array) {
    for (i in source) merge(source[i], destination[i]) // go deeper
  }  
  else {
    for (i in source) destination[i] = source[i];
  }
}

そしてあなたはそれを:で呼びますmerge (add, base);

于 2012-04-20T11:43:31.933 に答える
1

これを試して:

var mergeArr = function(arrFrom, arrTo) {
  for(var i=0;i<arrFrom.length; i++) {
    if (Array.isArray(arrFrom[i]) && Array.isArray(arrTo[i])) {
      mergeArr(arrFrom[i], arrTo[i]);
    } else {
      arrTo[i] = arrFrom[i];
    }
  }
}

あなたがそれに投げるどんな次元でも働くべきです。

于 2012-04-20T11:49:00.633 に答える