4

そこで、JavaScript で配列を使ってできるちょっとした練習を考えてみました。2 つの配列を「圧縮」方式などで結合するというアイデアに出くわしました(arrayA[0], arrayB[0], arrayA[1], arrayB[1]...)。潜在的に長い配列に残っているものはすべて、最後に追加されます。

私はstackoverflowを検索しました-私が尋ねている理由は、私が現在プログラミング入門コースに参加しているためです。そのため、JavaScriptでできることの多くを実際には知りません. 可能であれば、「簡単な」方法で解決策を見たいです!

私は現在、別の方法を行っていますが、配列の残りの部分を最後までタックする最後の部分を取得できないようです。

function alternatingMerge(array1, array2)
//this function will merge two different arrays in an alternating fashion
//i.e = array1[0], array2[0], array1[1], array2[1], array1[2], array2[2], ... , etc
{
    var mergedArray;
    var i; // while loop counter
    var j; // 
    var k; // 
    var arrayLengths;

    arrayLengths = array1.length + array2.length;
    i = 0; // 
    j = 0; // ARRAY1 COUNTER
    k = 0; // ARRAY2 COUNTER
    mergedArray = new Array(arrayLengths);
    //window.alert(mergedArray);

    while (i < arrayLengths)
    {
        if (i%2 === 0)
        {
            mergedArray[i] = array2[j];
            j = j + 1;
        }
        else
        {
            mergedArray[i] = array1[k];
            k = k + 1;
        }
        i = i + 1;
    }
    return mergedArray;
}

簡単なことだと思いますが、参考になれば幸いです!

4

6 に答える 6

4

これはどう:

function mergeAlternating(array1, array2) {
    var mergedArray = [];

    for (var i = 0, len = Math.max(array1.length, array2.length); i < len; i++) {
        if (i < array1.length) {
            mergedArray.push(array1[i]);
        }
        if (i < array2.length) {
            mergedArray.push(array2[i]);
        }
    }
    return mergedArray;
}
于 2012-04-25T01:08:41.500 に答える
2

ここで簡単に説明します...

// Takes an arbitrary number of arrays as arguments
function zip() {
   var merged = [], index = 0, cont, i;
   do {
      cont = false;
      for (var i=0; i<arguments.length; i++) {
         A = arguments[i];
         if (index < A.length) {   
            cont = true;
            merged.push(A[index]);
         }
      }
      index++;
   } while (cont);
   return merged;
}

merged = zip([1,3,5,7,9,11], [2,4,6,8]);
// [1, 2, 3, 4, 5, 6, 7, 8, 9, 11]

merged = zip([1, 4, 7], [2, 5, 8], [3, 6, 9])
// [1, 2, 3, 4, 5, 6, 7, 8, 9]
于 2012-04-25T01:14:55.133 に答える
0

しばらく考えた結果、これにたどり着きました。また、他のいくつかの回答と同様に、任意の数の配列を入力としてサポートします。

function merge() {
  var result = [];
  for (var i = 0;;++i) {
    var temp = [];
    for (var j = 0; j < arguments.length; ++j) {
      var atPos = arguments[j].slice(i, i+1);
      if (atPos.length) {
        temp.push(result.push(atPos[0]));
      }
    }
    if (temp.length == 0) {
      return result;
    }
  }
}
于 2012-04-25T06:27:21.380 に答える
0
var aOne = [1,3,5,7,9,11], aTwo = [2,4,6,8], aResult = [];
while (Math.max(aOne.length, aTwo.length) > 0)
  aResult.push(aOne.shift(), aTwo.shift());
document.writeln('aResult: ' + JSON.stringify(aResult.filter(Boolean)));
// aResult: [1,2,3,4,5,6,7,8,9,11]

配列の 1 つが他の配列の前に空である結果の値.filter(Boolean)を削除するには、これが必要です。null

于 2019-02-22T11:46:58.360 に答える