JavaScript 是否优化多个纯过滤器/映射/等?

Inf*_*tor 6 javascript performance compiler-optimization

我用函数式风格编写了这段 JavaScript 代码:

\n\n
someArray\n  .filter((element) => element)\n  .map((element) => element.property)\n  .map((property) => doSomethingWithIt)\n
Run Code Online (Sandbox Code Playgroud)\n\n

现在,na\xc3\xafve 实现将在数组上循环三次 \xe2\x80\x94,每个filtermap\xe2\x80\x94 一次,但是优化器应该能够将其优化为执行多个操作的一个循环,假设所有函数是纯粹的。

\n\n

(大多数?)JavaScript 引擎是否对此进行了优化?还是需要手动优化?

\n\n

编辑:我认为优化的是将其减少到一个循环:

\n\n
someArray.reduce((acc, element) => {\n  if(!element) {\n    return acc\n  }\n\n  return acc.push(doSomethingWithIt(element.property))\n}, [ ])\n
Run Code Online (Sandbox Code Playgroud)\n

Jac*_*ord 0

filter除非您想将其包含undefined在数组中,否则您无法删除该调用 - 您可以map使用解构将两个调用合二为一,但是:

someArray.filter(element => element).map(({ property }) => doSomething(property));
Run Code Online (Sandbox Code Playgroud)