2011-08-21 71 views
3

我試着去找出兩個數組合併成第三個最簡單的方法,使用jQuery,像這樣:jQuery的 - 合併兩個陣列,改變

[A,B,C,D] 
[1,2,3,4] 

答案是:

[A,1,B,2,C,3,D,4] 

又如:

[A,B,C] + [1,2,3,4,5] = [A,1,B,2,C,3,4,5] 
[A,B,C,D] + [1,2,3] = [A,1,B,2,C,3,D] 
+1

它們會一直保持相同的長度嗎? – Trey

+0

@Trey長度可以是任何 – 350D

+2

一個數組中應該發生什麼比另一個長? – arnaud576875

回答

3

您可以使用jQuery.map()[docs]方法直接創建一個數組。當您返回陣列時,jQuery.map會執行.concat()

當長度不同時,這也將防止陣列中的孔。

http://jsfiddle.net/zbCj7/

var chars = ['A','B','C','D']; 
var nums = [1,2,3,4]; 

var res = $.map(chars.length > nums.length ? chars : nums, function(v,i) { 
    var chr = chars[i]; 
    var num = nums[i]; 
    if(chr !== undefined && num !== undefined) { 
     return [chr,num]; 
    } else if(chr === undefined) { 
     return num; 
    } else { 
     return chr; 
    } 
}); 

或稍微更簡潔:

http://jsfiddle.net/zbCj7/1/

var chars = ['A','B','C','D']; 
var nums = [1,2]; 

var res = $.map(chars.length > nums.length ? chars : nums, function(v,i) { 
    var chr = chars[i]; 
    var num = nums[i]; 
    return (chr !== undefined && num !== undefined) ? 
     [chr,num] : (chr === undefined) ? num : chr; 
}); 

如果你真的想讓它簡潔,你可以這樣做:

http://jsfiddle.net/zbCj7/2/

var chars = ['A','B','C','D']; 
var nums = [1,2]; 

var res = $.map(chars.length > nums.length ? chars : nums, function(v,i) { 
    return [ chars[i], nums[i] ].slice(chars[i]===undefined, 
             nums[i]===undefined || 2); 
}); 
+1

@ 350D不客氣。 – user113716

7
var result = []; 
var a = ['A','B','C','D']; 
var b = [1,2,3,4]; 

$.each(a, function (index, value) { 
    result.push(value); 
    result.push(b[index]); 
}); 

嘗試在這裏:http://jsfiddle.net/GcTx7/3/

沒有jQuery的:

for (var i = 0, l = a.length; i < l; ++i) { 
    result.push(a[i], b[i]); 
} 

這一個採取了這樣的情況,當兩個陣列不具有相同的長度:

for (var i = 0, l = Math.max(a.length, b.length); i < l; ++i) { 
    if (i < a.length) result.push(a[i]); 
    if (i < b.length) result.push(b[i]); 
} 

http://jsfiddle.net/GcTx7/1/

+0

如果'a.length> b.length'這會將'undefined's推入'result',我強烈懷疑這是所需的行爲。 –

+1

這是未定義的行爲:) – arnaud576875

+0

偉大的開始。謝謝!你能幫助不同長度的數組嗎? – 350D

0

另一種方法,使用jQuery是:

var a = [1,2,3,4]; 
var b = ['a','b','c']; 
var merged_array = mergeArray([a,b]); 

function mergeArrays(arrayOfArray) { 
    var result = []; 
    for (var i = 0; i < arrayOfArray.length;i++) { 
     $.merge(result, arrayOfArray[i]); 
    } 
    return result; 
} 

這樣,您就可以合併爲許多陣列ü希望,而不必擔心個別數組的大小。

希望這可以幫助。