例如,在Python中我们有一个方便的工具 - 而不是像
那样编写values = [1,2,3,4,5]
altered_values = []
for v in values:
altered_values.append(v*25)
我们可以写
altered_values = [v*25 for v in values]
Javascript中有这样的单行吗?
答案 0 :(得分:3)
简答:不。
答案很长:在非常特殊的情况下:Array comprehensions是一个非常相似的工具,可能会出现在ECMAScript 7版本的语言中(即接下来的版本)。有了它们,你可以写:
var altered_values = [for (v of values) v*25];
目前它们仅受Spidermonkey引擎支持,即。 Firefox浏览器。
编辑:正如JamesAllardice在下面指出的那样,它们也可以通过Babel转换库使用,这意味着您几乎可以在任何浏览器中使用它们。
答案 1 :(得分:1)
Babel用于支持理解的语法,但不再支持。现代浏览器都不再支持理解了。此外,截至2017年,似乎没有计划在不久的将来随时重新添加支持。但是,使用ES6,您可以使用生成器函数来模拟类似python的列表理解的功能: 考虑这个例子:
const someArray = [1,2,3,4,5,6];
const evens = [...(function*() { for(let x of someArray) if(x%2 == 0) yield x;})()]
console.log(evens);
// [2,4,6]
这适用于支持当前ES6标准的浏览器。现在有一个针对箭头生成器的提议,这会使这种语法缩短一点。
我绝对不会在生产代码中使用它,除非你(以及所有正在编写代码的人)非常习惯使用生成器作为迭代器。还有它的那种丑陋。但是,它确实比map
更具优势。如果您使用map
实现了相同的功能,那么您之后还需要记住compact
。这是因为对于所有不均匀的数字,map将返回undefined。
那看起来像是:
const someArray = [1,2,3,4,5,6];
const evens = someArray.map(x => {
if(x % 2 === 0) return x;
});
当然filter
在这个例子中效果更好
您可以在生成器函数here上找到文档。