如何解决FlatMap与Reduce进行映射和过滤-是否推荐使用另一个?
根据this SO thread,flatMap
或reduce
的建议,当一个人需要在一组对象上进行映射和过滤时,尤其是在它们希望避免多次遍历整个集合时,尤其如此。就我个人而言,我更喜欢使用flatMap
,因为我认为它更易于阅读,但这当然完全是主观的。除了flatMap
的浏览器兼容性问题之外,通常还是推荐一种方法或该方法优于另一种方法(也许是由于(但不限于)性能或可读性的原因)?
更新:以下是flatMap过滤的引用答案中的一个示例:
var options = [{
name: 'One',assigned: true
},{
name: 'Two',assigned: false
},{
name: 'Three',];
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>
解决方法
两者都不是。对于映射和过滤,您应该使用map
和filter
:
var assignees = options.filter(o => o.assigned).map(o => o.name);
更简单易读,它直接表达了您的意图。清晰无比。
如果您关心性能,请始终进行基准测试,以查看对实际案例的实际影响-但不要过早优化。
,在这种情况下,我将使用减少值。
var options = [{
name: 'One',assigned: true
},{
name: 'Two',assigned: false
},{
name: 'Three',];
var assignees = options.reduce((results,item) => {
if (item.assigned) {
results.push(item.name);
}
return results;
},[]);
console.log(assignees);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。