2012-04-25 20 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; 
    } 
    } 
}