FlatMap与Reduce在映射和过滤方面的对比-是否推荐其中一种



根据这个SO线程,当需要映射和筛选对象数组时,建议使用flatMapreduce,尤其是当它们希望避免多次循环遍历集合时。就我个人而言,我更喜欢使用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);
<h1>Only assigned options</h1>
<pre id="output"> </pre>

实际上两者都不是。对于映射和过滤,您应该使用mapfilter:

var assignees = options.filter(o => o.assigned).map(o => o.name);

它更简单易读,直接表达了你的意图。没有什么比清晰度更好的了。

如果你关心性能,请始终进行基准测试,以查看对现实世界案例的实际影响,但不要过早优化。

在这种情况下,我会使用reduce。

var options = [{
name: 'One',
assigned: true
},
{
name: 'Two',
assigned: false
},
{
name: 'Three',
assigned: true
},
];
var assignees = options.reduce((results, item) => {
if (item.assigned) {
results.push(item.name);
}
return results;
}, []);
console.log(assignees);

相关内容

最新更新