2017-04-02 3 views
0

2つの配列を1つの配列にマージする必要があります。私はコードを持っていますが、それは期待どおりに機能しません - それは次々とマージしていますが、値を連動させる必要があります。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);

あなたは配列1にマップを使用する場合、最初のパラメータは、ループに配列1の電流値であり、2番目のパラメータは、アレイ内のその要素のインデックスです。したがって、array1の現在の要素とindexを使用して同じインデックスを持つ他の配列の要素を一致させることができます。

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)を組み合わせて使用​​することができます:あなたは、任意の数のためArray#reduceArray#mapを使用することができます

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

同じ長さの配列の

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); 
関連する問題