【发布时间】:2011-03-26 05:55:44
【问题描述】:
这是一个简单的问题,我以前也做过。我只是不记得它是怎么称呼的,也不记得它到底叫什么。
在 python 中我可以这样做:
arr = ['one', 'two']
one, two = arr
如何在 JavaScript 中做到这一点?
【问题讨论】:
标签: javascript arrays
这是一个简单的问题,我以前也做过。我只是不记得它是怎么称呼的,也不记得它到底叫什么。
在 python 中我可以这样做:
arr = ['one', 'two']
one, two = arr
如何在 JavaScript 中做到这一点?
【问题讨论】:
标签: javascript arrays
这是目前唯一的跨浏览器兼容解决方案 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'
【讨论】:
这个问题相当老了,但我喜欢发布这个替代方案(2016 年):也可以使用 spread 运算符“...”。
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);
【讨论】:
那是destructuring assignment。您可以使用以下语法在某些浏览器中执行此操作:
[one, two] = arr;
一些最新的浏览器和转译器支持它,例如 Babel 和 Traceur。这是 ECMAScript 4 引入的一个功能,后来成为 ECMAScript Harmony,最终成为 ES 2015。
【讨论】:
如果您想将数组项作为函数参数传递,您可以使用数组的 apply 函数。
【讨论】:
Array 是否有 .apply() 函数。我想你的意思是some_function.apply(this, my_array)。看到这个answer
认真的想法的实现。
http://jsfiddle.net/RichAyotte/6D2wP/
(function(a, b, c, d) {
console.log(a, b, c, d);
}.apply(this, ['a', 'b', 'c', 'd']));
【讨论】:
var one = arr[0];
var two = arr[1];
【讨论】:
var来防止变量污染全局范围。
var 可能比拥有两个单独的 var 声明更好。
CoffeeScript 有它:http://jashkenas.github.com/coffee-script/#pattern_matching
并且,从页面顶部引用:
“CoffeeScript 是一种可以编译成 JavaScript 的小语言。可以把它想象成 JavaScript 中不那么招摇的小弟——相同的基因,大致相同的身高,但风格不同。除了一些额外的好东西,在CoffeeScript 与 JavaScript 中的等价物一一对应,这只是另一种说法。”
【讨论】:
解构赋值语法是一种 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];');
}
知道你有 2 个变量。第一个是“一”,即“一”,第二个是“二”,即“二”。 你的问题解决了! 但是对于代码 sn-p,我创建了额外的元素来显示 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);
【讨论】: