2017-04-02 33 views
0

我需要將兩個數組合併成一個數組。我有代碼,但它不能按預期工作 - 它正在一個接一個地合併它們,但我需要將這些值聯繫起來。基於索引使用javascript合併多個數組

<html> 
 

 
<head> 
 
    <title></title> 
 
    <script src="https://code.jquery.com/jquery-3.1.1.js"></script> 
 
</head> 
 

 
<body> 
 
    <div id="result"></div> 
 
    <script type="text/javascript"> 
 
    var array1 = [1, 2, 3, 4]; 
 
    var array2 = ["a", "b", "c", "d"]; 
 
    var newArray = $.merge(array1, array2); 
 
    $("#result").html(newArray); 
 
    //the result its 1234absd 
 
    //ineed result like 1a,2b,3c,4d 
 
    </script> 
 
</body> 
 

 
</html>

+1

如果什麼兩個數組的長度不同? –

+0

如果你需要以這種方式合併2個以上的數組,我已經在我的答案下面創建了一個函數 –

回答

4

可以在純JavaScript中使用Array#map

var array1 = [1, 2, 3, 4]; 
 
var array2 = ["a", "b", "c", "d"]; 
 

 
var newArray = array1.map((e, i) => e + array2[i]); 
 
console.log(newArray);

如果在ARRAY1使用地圖然後第一個參數是在環ARRAY1的電流值和所述第二參數是在陣列元素的索引。因此,您可以將array1中的當前元素與使用索引具有相同索引的其他數組中的元素進行匹配。

var array1 = [1, 2, 3, 4]; 
 
var array2 = ["a", "b", "c", "d"]; 
 
var array3 = ["f", "d", "s", "a"]; 
 

 
var newArray = array1.map(function(value, index) { 
 
    return value + array2[index] + array3[index]; 
 
}); 
 
console.log(newArray);

+0

它的工作很好,謝謝你可以請你解釋函數。也就是說我需要3或4個數組來保留yhis函數,再次感謝你的配合。 –

+0

所有數組的長度是否相同? –

+0

是的,我使用始終相同的長度 –

0

您可以使用reduceconcatsource)的組合:

var array1 = [1, 2, 3, 4]; 
 
var array2 = ["a", "b", "c", "d"]; 
 
var newArray = array1.reduce(function(prev, curr) { 
 
    return prev.concat(curr, array2[prev.length/2]); 
 
}, []); 
 
$("#result").html(newArray);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="result"></div>

3

你可以使用Array#reduceArray#map爲任意數相同長度的陣列。

var a1 = [1, 2, 3, 4], 
 
    a2 = ["a", "b", "c", "d"], 
 
    a3 = [9, 8, 7, 6], 
 
    a4 = ["z", "y", "x", "w"], 
 
    result = [a1, a2, a3, a4].reduce((a, b) => a.map((v, i) => v + b[i])); 
 

 
console.log(result);

ES5

var a1 = [1, 2, 3, 4], 
 
    a2 = ["a", "b", "c", "d"], 
 
    a3 = [9, 8, 7, 6], 
 
    a4 = ["z", "y", "x", "w"], 
 
    result = [a1, a2, a3, a4].reduce(function (a, b) { 
 
     return a.map(function (v, i) { 
 
      return v + b[i]; 
 
     }); 
 
    }); 
 

 
console.log(result);

0

如果有人需要在上述在後提到的方式來合併任何數量的陣列(具有固定長度) ,以下功能將很有用

console.clear(); 
 
var array1 = ["a1", "b1", "c1", "d1"]; 
 
var array2 = ["a2", "b2", "c2", "d2"]; 
 
var array3 = ["a3", "b3", "c3", "d3"]; 
 
var array4 = ["a4", "b4", "c4", "d4"]; 
 

 
function mergeElementsAtIndex(one_or_more_arrays){ 
 
    const total_arr = arguments.length; 
 
    newArray = arguments[0].map((v, k) => { 
 
    \t var temp_val = v; 
 
     for(var i=1; i < total_arr; i++){ 
 
    \t  temp_val += arguments[i][k]; 
 
     } 
 
     return temp_val; 
 
    }); 
 
    return newArray; 
 
} 
 
merged_array = mergeElementsAtIndex(array1, array2, array3, array4); 
 
console.log(merged_array);
.as-console-wrapper { max-height: 100% !important; top: 0; }

0

那麼實際上的JavaScript缺乏.zip()算符這將是正是你正在做什麼非常方便。讓我們發明它;

Array.prototype.zip = function(a){ 
 
return this.map((e,i) => typeof e === "object" || typeof a[i] === "object" ? [e,a[i]] : e+a[i]); 
 
}; 
 

 
var arrays = [[1, 2, 3, 4], 
 
       ["a", "b", "c", "d"], 
 
       [9, 8, 7, 6], 
 
       ["z", "y", "x", "w"], 
 
       [[1,2,3],[4,5,6],[7,8,9],[10,11,12]] 
 
      ], 
 
result = arrays.reduce((p,c) => p.zip(c)); 
 
console.log(result);

0
var array1 = [1, 2, 3, 4]; 
var array2 = ["a", "b", "c", "d"]; 
var array3 = ["f", "d", "s", "a"]; 

var newArray = array1.map(function(value, index) { 
    return value + array2[index] + array3[index]; 
}); 
console.log(newArray); 
相關問題