2012-04-25 25 views
1

所以,我一直在考慮一些我可以用JavaScript做數組的小練習。我遇到了以「壓縮」方式(arrayA [0],arrayB [0],arrayA [1],arrayB [1] ...)組合兩個數組等等的想法,等等。任何遺留在可能更長的陣列中的東西都會被加入到最後。以「壓縮」的方式組合兩個數組 - 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函數](http://stackoverflow.com/questions/4856717) – hippietrail 2013-01-09 23:24:05

回答

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