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

时间:2010-08-06 09:21:00

标签: javascript arrays

这是一个简单的问题,我以前做过。我只是不记得它是怎么称呼的,或者究竟是什么叫它。

在python中,我可以这样做:

arr = ['one', 'two']
one, two = arr

我如何在JavaScript中执行此操作?

8 个答案:

答案 0 :(得分:138)

这是目前唯一的跨浏览器兼容解决方案AFAIK:

var one = arr[0],
    two = arr[1];

ES6将允许解构分配:

let [x, y] = ['foo', 'bar'];
console.log(x); // 'foo'
console.log(y); // 'bar'

或者,坚持你最初的例子:

var arr = ['one', 'two'];
var [one, two] = arr;

您还可以创建默认值:

const [one = 'one', two = 'two', three = 'three'] = [1, 2];
console.log(one); // 1
console.log(two); // 2
console.log(three); // 'three'

答案 1 :(得分:13)

那是destructuring assignment。您可以使用以下语法在某些浏览器中执行此操作:

[one, two] = arr;

一些最新的浏览器和转发器支持它,例如BabelTraceur。这是ECMAScript 4引入的一个功能,后来成为ECMAScript Harmony,最终成为ES 2015。

答案 2 :(得分:9)

问题相当陈旧但我想发布这个替代(2016)解决方案:还可以使用传播运算符" ..."。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator

let xAndY = [42, 1337];
let f = function(x, y) { return x + y; };
f(...xAndY);

答案 3 :(得分:6)

如果希望将数组项作为函数参数传递,则可以使用数组的apply函数。

答案 4 :(得分:5)

实施严肃的想法。

http://jsfiddle.net/RichAyotte/6D2wP/

(function(a, b, c, d) {
    console.log(a, b, c, d);   
}.apply(this, ['a', 'b', 'c', 'd']));

答案 5 :(得分:2)

var one = arr[0];
var two = arr[1];

答案 6 :(得分:2)

CoffeeScript拥有它:http://jashkenas.github.com/coffee-script/#pattern_matching

并且,引自页面顶部:

“CoffeeScript是一种编译成JavaScript的小语言。把它想象成JavaScript不那么炫耀的小兄弟 - 相同的基因,大致相同的高度,但风格不同。除了一些额外的好东西,在CoffeeScript与JavaScript中的等价物一一对应,这只是另一种说法。“

答案 7 :(得分:0)

我的示例适用于您的示例,但也适用于您不知道数组或数组长度的情况。

arr = ['one', 'two'];
var length = arr.length;
for (var i = 0; i < length; i++)
{
   var val = arr[i];
   eval('var '+arr[i]+'= arr[i];');
}

知道你有 2 个变量。第一个是“一”,即“一”,第二个是“二”,即“二”。 你的问题解决了! 但是对于代码片段,我创建了额外的元素来显示 var 并记录下来。

arr = ['one', 'two'];
var length = arr.length;
for (var i = 0; i < length; i++)
{
   var val = arr[i];
   eval('var '+arr[i]+'= arr[i];');
}
var p = document.createElement("p");
p.innerHTML = one + " " + two;
document.body.appendChild(p);
console.log(one, two);