2012-04-25 16 views
1

JavaScriptでは配列を使ってできることを少し練習しました。私は2つの配列を "ジッパー"(arrayA [0]、arrayB [0]、arrayA [1]、arrayB [1] ...)のやり方で組み合わせるという考え方に出くわしました。潜在的に長い配列の中に残っているものは、最後に付け加えられます。2つの配列を "ジッパー"方式で結合する - JavaScript

私は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; 
} 

私はそれが単純なものだと感じますが、いくつかの助けに感謝します!これについて

+0

重複:[Pythonのzip関数のJavascriptに相当](http://stackoverflow.com/questions/4856717) – hippietrail

答えて

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; 
} 
0

ここでは簡単テイクだ...

// 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] 
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; 
    } 
    } 
} 
関連する問題