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


141

这是一个简单的问题,我之前已经做过。我只是不记得是怎么回事,或确切地叫什么。

在python中,我可以这样做:

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

如何在JavaScript中做到这一点?

Answers:


173

这是目前唯一的跨浏览器兼容解决方案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'

5
截止到今天,解构任务已得到全面支持kangax.github.io/compat-table/es6/#test-destructuring
grandrew '16

20

那是破坏性的任务。您可以在某些浏览器中使用以下语法进行操作:

[one, two] = arr;

一些最新的浏览器和编译器(如BabelTraceur)都支持它。这是ECMAScript 4引入的功能,后来成为ECMAScript Harmony,最终成为ES 2015。


看起来它是ES6(2015)的一部分,而不是ES4?ecma-international.org/ecma-262/6.0/…–
jab

@jab:谢谢!有时候,这些旧答案会被忘记并变得过时,尽管看起来Mathias已经在该答案中添加了该信息:)
Andy E


6

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


4
我不确定JavaScript Array是否具有.apply()功能。我想你的意思是some_function.apply(this, my_array)。看到这个答案
Kit



2

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

并且,引用自页面顶部:

“ CoffeeScript是一种可编译为JavaScript的小语言。可以将它视为JavaScript不太那么夸张的小兄弟-相同的基因,大致相同的身高,但是风格不同。与JavaScript中的功能一一对应,这只是另一种说法。”


1
这不能回答问题。我很欣赏CoffeeScript的功能,但是问题是关于Javascript的。
Hovis Biddle

无效链接:((((
Paul Draper
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.