考虑这个数据结构:
var vehicles = [
[ "2011","Honda","Accord" ],
[ "2010","Honda","Accord" ],
.....
];
循环遍历每个 vehicle 项目,有没有办法将数组元素一次性重新分配给各个变量,如:
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];
.....
}
很好奇,因为这种类型的东西在其他编程语言中可用。谢谢!
答案 0 :(得分:4)
不幸的是,目前没有一种方法可以做到这一点XBrowser。 (我知道)。
相对较快,可以跨浏览器,请参阅链接:
https://developer.mozilla.org/en/New_in_JavaScript_1.7
(在PHP中有“list”,它会完全按照你的意愿行事,没有类似的XBrowser for javascript)
当然相对较快可能意味着什么等等。(感谢Felix指出我的错误)
答案 1 :(得分: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];
.....
}
答案 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]);
}
答案 3 :(得分:0)
现在可以使用ES6的阵列解构了。
根据文档:
解构赋值语法是一个JavaScript表达式,可以将数组中的值或对象中的属性解压缩为不同的变量。
考虑以下示例:
chart()
与数据一样,var chartobject = chart().width(100).height(100)d3.select("#id1").data(data).call(chartobject);
var chartobject2 = chart().width(200).height(200)d3.select("#id2").data(data).call(chartobject2);
方法也可用于遍历数组元素以及数组解构:
let [a, b, c] = [10, 20, 30];
console.log(a); // output => 10
console.log(b); // output => 20
console.log(c); // output => 30
参考: