这是一个简单的问题,我以前做过。我只是不记得它是怎么称呼的,或者究竟是什么叫它。
在python中,我可以这样做:
arr = ['one', 'two']
one, two = arr
我如何在JavaScript中执行此操作?
答案 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;
一些最新的浏览器和转发器支持它,例如Babel和Traceur。这是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);