2011-03-10 51 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数组。