像 JS 中的列表理解之类的东西?

Something like list comprehension in JS?

例如,在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中可以使用这样的一行吗?

简答:没有。

长答案:有点,在非常特殊的情况下:Array comprehensions 是一个非常相似的工具,它可能存在于该语言的 ECMAScript 7 版本中(这是下一个)。有了它们你可以写:

var altered_values = [for (v of values) v*25];

目前它们仅受 Spidermonkey 引擎支持,即。火狐.

Edit:正如 JamesAllardice 在下面指出的,它们也可以通过 Babel 转译库使用,这意味着您实际上可以在任何浏览器中使用它们。

Babel 过去支持理解语法,但现在不再支持了。 None 的现代浏览器也不再支持理解。此外,截至 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 将 return undefined 用于所有奇数。 看起来像:

const someArray = [1,2,3,4,5,6];
const evens = someArray.map(x => {
  if(x % 2 === 0) return x;
});

当然 filter 在这个例子中效果会更好。
您可以找到有关生成器函数的文档 here.