根据此 SO thread,flatMap或者reduce当需要映射和过滤一组对象时推荐,特别是如果他们想避免多次循环遍历集合。就我个人而言,我更喜欢使用它flatMap,因为我认为它更容易阅读,但这当然完全是主观的。除了 的浏览器兼容性问题之外flatMap,是否普遍推荐一种方法或比另一种方法更有利(可能是因为但不限于性能或可读性的原因)?
更新:这是来自 flatMap 过滤的参考答案的示例:
var options = [{
name: 'One',
assigned: true
},
{
name: 'Two',
assigned: false
},
{
name: 'Three',
assigned: true
},
];
var assignees = options.flatMap((o) => (o.assigned ? [o.name] : []));
console.log(assignees);
document.getElementById("output").innerHTML = JSON.stringify(assignees);Run Code Online (Sandbox Code Playgroud)
<h1>Only assigned options</h1>
<pre id="output"> </pre>Run Code Online (Sandbox Code Playgroud)
实际上也不是。对于映射和过滤,您应该使用mapand filter:
var assignees = options.filter(o => o.assigned).map(o => o.name);
Run Code Online (Sandbox Code Playgroud)
更简单、更易读,它直接表达了您的意图。在清晰度方面没有什么比这更好的了。
如果您关心性能,请始终进行基准测试以查看对实际案例的实际影响 - 但不要过早优化。