在我的很多代码中,我做了类似的事情:
return routes.map(route => processValue(route.someProperty));
快速返回一个只包含我需要的已处理数据的新数组。但是,在当前形式中,如果您不返回任何内容,则新数组的索引值将为undefined
,其中map()
在原始数组元素上运行该函数。
我想知道是否有类似的,快速的方法来实现与.map()
和filter()
混合的东西,其中新数组只包含从回调函数返回的元素?
答案 0 :(得分:0)
您可以使用.reduce
:
return routes.reduce((acc, route) => {
const value = processValue(route.someProperty);
if (value !== undefined) acc.push(value);
return acc;
}, []);
甚至更小,只要processValue
不返回数组:
return routes.reduce((acc, route) => acc.concat(processValue(route.someProperty) || [], []);
我个人喜欢.map().filter
但是
return routes
.map((route) => processValue(route.someProperty))
.filter(Boolean);