2011-01-12 77 views
1

考虑这个数据结构:分裂JavaScript数组到各个变量

var vehicles = [ 
    [ "2011","Honda","Accord" ], 
    [ "2010","Honda","Accord" ], 
    ..... 
]; 

通过每个车辆循环项目,是有办法重新分配数组元素将各个变量都在同一个镜头,是这样的:

for (i = 0; i < vehicles.length; i++) { 
    var(year,make,model) = vehicles[i]; // doesn't work 
    ..... 
} 

...我试图从做脱身:

for (i = 0; i < vehicles.length; i++) { 
    var year = vehicles[i][0]; 
    var make = vehicles[i][1]; 
    var model = vehicles[i][2]; 
    ..... 
} 

只是好奇,因为这种类型的东西可用其他编程语言。谢谢!

回答

4

不幸的是,目前还没有一种方法可以做到这一点,目前XBrowser。 (我知道)。

比较快这是可能的跨浏览器,见链接:

https://developer.mozilla.org/en/New_in_JavaScript_1.7

(在PHP中有 “清单”,这将不正是你希望的东西,没有什么类似Xbrowser中的JavaScript还)

当然相对较快可能意味着什么等(感谢菲利克斯指出我的错误在这)

+0

+1(。链接被截断仅供参考) – polarblau 2011-01-12 16:46:02

+0

@Felix,好点。我的意思是这是不支持的(我知道)跨浏览器(通过现代webkit的现代IE)。将编辑,使更清晰,谢谢。 – 2011-01-12 16:48:35

1

也许最接近你目前在javascript中是消除冗余var并用逗号分隔符分隔语句。

for (i = 0; i < vehicles.length; i++) { 
    var year = vehicles[i][0], make = vehicles[i][1], model = vehicles[i][2]; 
    ..... 
} 

,或者你可以缩短它更像是这个有点:

for (i = 0; i < vehicles.length; i++) { 
    var v = vehicles[i], year = v[0], make = v[1], model = v[2]; 
    ..... 
} 
1

,我能想到的是使用功能和使用apply()调用它的最接近的替代产品。传递数组时,它会作为每个参数传递。

function vehicle(year, make, model) { 
    // do stuff 
} 

for (i = 0; i < vehicles.length; i++) { 
    vehicle.apply (this, vehicles[i]); 
} 

或匿名函数:

for (i = 0; i < vehicles.length; i++) { 
    (function(year, make, model) { 
     // do stuff 
    }).apply(this, vehicles[i]); 
}