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

这是个简单的问题,我以前做过。我只是不记得它是怎么来的,或者它到底叫什么。

在 python 中,我可以这样做:

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

如何在 JavaScript 中做到这一点?

99975 次浏览

这就是 破坏性转让。你可以在一些浏览器中使用以下语法:

[one, two] = arr;

它在一些最新的浏览器和转换器(如 巴别塔Traceur)中得到了支持。这是 ECMAScript 4引入的一个特性,后来成为 ECMAScript Harmony,最终成为 ES 2015。

var one = arr[0];
var 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'

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

并且,从页面顶部引用:

CoffeeScript 是一种可以编译成 JavaScript 的小语言。可以把它想象成 JavaScript 不那么招摇的弟弟ーー基因相同,身高大致相同,但风格不同。除了一些额外的好处,CoffeeScript 中的语句与 JavaScript 中的对等语句一一对应,这只是表达它的另一种方式。”

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

严肃思想的实施。

Http://jsfiddle.net/richayotte/6d2wp/

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

这个问题已经很老了,但是我想提出这个替代的(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);

我的示例适用于您的示例,但是如果您不知道数组或数组长度,也可以使用我的示例。

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,并将其记录下来。

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

解构赋值语法是一个 JavaScript 表达式,它可以将数组中的值或对象中的属性解压缩为不同的变量。

这里有个例子,你可以这样试试。

 let a, b, rest;
[a, b] = [10, 20];


console.log(a);
// expected output: 10


console.log(b);
// expected output: 20


[a, b, ...rest] = [10, 20, 30, 40, 50];


console.log(rest);
// expected output: Array [30,40,50]
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);