例如,在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 中可能吗?
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 都会返回未定义的值。
看起来像:
const someArray = [1,2,3,4,5,6];
const evens = someArray.map(x => {
if(x % 2 === 0) return x;
});
当然
filter
在这个例子中效果会更好。现代 JS 的一句台词是:
altered_values = values.map(v => v*25)