使用reduce同时实现map和filter

时间:2021-08-03 18:29:07

假设现在有一个数列,你希望更新它的每一项(map的功能)然后筛选出一部分(filter的功能)。如果是先使用map然后filter的话,你需要遍历这个数组两次。

在下面的代码中,我们将数列中的值翻倍,然后挑选出那些大于50的数。有注意到我们是如何非常高效地使用reduce来同时完成map和filter方法的吗?

 
  1. const numbers = [10, 20, 30, 40];

  2. const doubledOver50 = numbers.reduce((finalList, num) => {

  3.   num = num * 2;

  4.   if (num > 50) {

  5.    finalList.push(num);

  6.   }

  7.   return finalList;

  8. }, []);

  9. doubledOver50; // [60, 80]

2.2 使用reduce取代map和filter

如果你认真阅读了上面的代码,你应该能理解reduce是可以取代map和filter的。