2011-03-10 53 views
2
status_name=Array("a","b","c","b","e","f"); 
status_id=Array(1, 2, 3, 4, 5, 6); 

如何將這兩個陣列組合,並預計多維數組是這樣Combaining×2個陣列爲單多維數組中的JavaScript

[["a", 1],["b", 2],["c", 3],["d", 4],["e", 5],["f", 6]] 

建立多維數組幫助我如何使用上面的兩個數組值並內置預計我多維數組

回答

1

我想我和帶來的這一解決方案,它可以幫助一些一

status_name=Array("a","b","c","b","e","f"); 
    status_id=Array(1, 2, 3, 4, 5, 6); 

腳本:

  Values=[]; 
      for (i = 0; i < status_name.length; ++i) 
      { 
       Values[i] =Array(status_name[i], status_id[i]); 
      } 
1
var combined = [], length = Math.min(status_name.length, status_id.length); 
for(var i = 0; i < length; i++) { 
    combined.push([status_name[i], status_id[i]]); 
} 

你也可以使用Array.prototype.map,但不是在所有的瀏覽器都支持:

var combined = status_name.map(function(name, index) { return [name, status_id[index]] }); 
+0

你的意思是? 'combined.push([status_name [i],status_id [i]);' 一個方括號多餘的傢伙 – Harish 2011-03-10 10:46:14

+0

@Harish:謝謝,更新。 – 2011-03-11 11:23:11

5

JavaScript有這個沒有buitin方法,但你可以在你自己隨便寫:

function zip(arrayA, arrayB) { 
    var length = Math.min(arrayA.length, arrayB.length); 
    var result = []; 
    for (var n = 0; n < length; n++) { 
     result.push([arrayA[n], arrayB[n]]); 
    } 
    return result; 
} 

名稱zip選擇,因爲做了這樣的功能在其他語言中通常被稱爲zip

0

嘗試

function array_combine (keys, values) { 
    // Creates an array by using the elements of the first parameter as keys and the elements of the second as the corresponding values 
    // 
    // version: 1102.614 
    // discuss at: http://phpjs.org/functions/array_combine 
    // + original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) 
    // + improved by: Brett Zamir (http://brett-zamir.me) 
    // *  example 1: array_combine([0,1,2], ['kevin','van','zonneveld']); 
    // *  returns 1: {0: 'kevin', 1: 'van', 2: 'zonneveld'} 
    var new_array = {}, 
     keycount = keys && keys.length, 
     i = 0; 

    // input sanitation 
    if (typeof keys !== 'object' || typeof values !== 'object' || // Only accept arrays or array-like objects 
    typeof keycount !== 'number' || typeof values.length !== 'number' || !keycount) { // Require arrays to have a count 
     return false; 
    } 

    // number of elements does not match 
    if (keycount != values.length) { 
     return false; 
    } 

    for (i = 0; i < keycount; i++) { 
     new_array[keys[i]] = values[i]; 
    } 

    return new_array; 

參考
- arr combine
- array combine

7

既然你包括jQuery的,你可以使用jQuery.map以類似的方式給Linus的回答:

var result  = [], 
    status_name = ["a","b","c","b","e","f"], 
    status_id = [1, 2, 3, 4, 5, 6]; 

result = $.map(status_name, function (el, idx) { 
    return [[el, status_id[idx]]]; 
}); 

看你的變量名,我猜你的到來從一種語言(如PHP)。如果是這樣的話,確保你記得用var關鍵字聲明局部變量,否則你將會污染全局範圍,並且你會在IE中遇到一些可怕的錯誤。

0

使用jQuery.map

var status_name = ["a","b","c","b","e","f"], 
    status_id = [1,2,3,4,5,6], 
    r = []; 

r = $.map(status_name, function(n, i) { 
    return [[n, status_id[i]]]; 
}); 

return [[n, status_id[i]]]return [n, status_id[i]]之間的差異。使用前者將導致2d數組,而使用後者將導致1d數組。