在数组上循环并创建一个新值的最短方法是省略值?

时间:2017-04-18 16:05:21

标签: javascript arrays ecmascript-6

在我的很多代码中,我做了类似的事情:

return routes.map(route => processValue(route.someProperty));

快速返回一个只包含我需要的已处理数据的新数组。但是,在当前形式中,如果您不返回任何内容,则新数组的索引值将为undefined,其中map()在原始数组元素上运行该函数。

我想知道是否有类似的,快速的方法来实现与.map()filter()混合的东西,其中新数组只包含从回调函数返回的元素?

1 个答案:

答案 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);