JavaScript:将数组拆分为单独的变量

4

考虑以下数据结构:

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];
  .....
}

我很好奇这种功能在其他编程语言中是否可用。谢谢!

5个回答

6

现在可以使用ES6的数组解构。

根据文档:

解构赋值语法是一种JavaScript表达式,它使得从数组中解包值或从对象中解包属性成为可能,并将这些值和属性分配给独立的变量。

考虑以下示例:

let [a, b, c] = [10, 20, 30];

console.log(a);  // output => 10
console.log(b);  // output => 20
console.log(c);  // output => 30

与数据一样,.forEach()方法也可用于遍历数组元素,与数组解构一起使用:

let vehicles = [
  [ "2011","Honda","Accord" ],
  [ "2010","Honda","Accord" ]
];

vehicles.forEach(([year, make, model], index) => {
  // ... your code here ...
  console.log(`${year}, ${make}, ${model}, ${index}`);
});

参考资料:


注:以上内容涉及IT技术。

4

很遗憾,目前 XBrowser 没有这样的方法(至少我不知道有)。

相对较快,可能可以跨浏览器实现,参见链接:

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

在PHP中有一个名为“list”的功能,可以完全满足您的要求,在JavaScript中尚无类似XBrowser的功能。当然,“相对很快”可能意味着任何事情等等。(感谢Felix指出我的错误)

编辑:此现在可用,请参见:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment#Array_destructuring


@Felix,说得好。我的意思是这个功能(据我所知)不支持跨浏览器(从现代IE到现代webkit)。我会进行编辑以使其更加清晰,谢谢。 - Jason Benson
1
谢谢。那很好。在Perl中,您只需执行直接赋值:my($first,$second,$third,...) = @array; 也许这是关于Perl的少数简单事情之一? :) - Wick

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]);
}

1

在JavaScript中将数组解构为单独的变量

解构赋值语法是一种JavaScript表达式,它使得从数组中拆分值或从对象中提取属性成为可能,并将其赋值给单独的变量。

  let array = [2,3]; 
  [a,b] = array;// unpacking array into var a and b
  console.log(a); //output 2
  console.log(b); //output 3
  let obj = {name:"someone",weight:"500pounds"};
  let {name,weight} = obj; // unpacking obj into  var name and weight
  console.log(name);// output someone
  console.log(weight);//output 500pounds

来源


这与2018年被接受的答案完全相同,但是感谢您--我很欣赏解包对象的额外示例! - Wick

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接