[JavaScript] JavaScript实现Map、Reduce和Filter →→→→→进入此内容的聊天室

来自 , 2020-01-17, 写在 JavaScript, 查看 105 次.
URL http://www.code666.cn/view/c80d9ba4
  1. <script type="text/javascript">
  2.         // 函数式编程:
  3.         // 描述我们要做什么,而不是我们如何去做。这意味着我们工作在一个更高的抽象层次。函数式编程将导致更精巧、清晰和令人愉快的代码。
  4.  
  5.         // 最基础的forEach
  6.         function forEach(array, action) {
  7.                 for (var i = 0; i < array.length; i++) {
  8.                         action(array[i]);
  9.                 }
  10.         }
  11.  
  12.         // 测试forEach
  13.         forEach(["Pear", "Apple"], function(name) {
  14.                 console.log(name);
  15.         });
  16.  
  17.         // ------------------------------------------------ //
  18.         // 实现reduce
  19.         function reduce(combine, base, array) {
  20.                 forEach(array, function(element) {
  21.                         base = combine(base, element);
  22.                 });
  23.                 return base;
  24.         }
  25.  
  26.         // 使用reduce实例1:计算数组中的0的个数
  27.         function countZeros(array) {
  28.                 function counter(total, elem) {
  29.                         return total + (elem == 0 ? 1 : 0);
  30.                 }
  31.  
  32.                 return reduce(counter, 0, array);
  33.         }
  34.  
  35.         alert("countZeros by reduce: " + countZeros([1, 3, 0, 4, 7, 0]));
  36.  
  37.         // 使用reduce实例2:求和
  38.         function sum(array) {
  39.                 function add(a, b) {
  40.                         return a + b;
  41.                 }
  42.  
  43.                 return reduce(add, 0, array);
  44.         }
  45.  
  46.         alert("sum by reduce: " + sum([1, 2, 3, 5]));
  47.  
  48.  
  49.         // ------------------------------------------------ //
  50.  
  51.         // 实现map
  52.         function map(func, array) {
  53.                 var result = [];
  54.                 forEach(array, function(elem) {
  55.                         result.push(func(elem));
  56.                         // 对于map,func函数一般只有一个参数,所以用func(elem)
  57.                 });
  58.  
  59.                 return result;
  60.         }
  61.  
  62.         // 利用map实现数组的每个数字翻倍
  63.         var array = [1, 2, 3, 4, 5];
  64.         var mappedArray = map(function(elem) {
  65.                 return elem * 2;
  66.         }, array);
  67.         console.log(mappedArray);
  68.  
  69.         // 利用map实现数组向下取整
  70.         var array2 = [1.3, 4.5, 6.7, 8, 9.2];
  71.         var mappedArray2 = map(Math.floor, array2);
  72.         console.log(mappedArray2);
  73.  
  74.  
  75.         // ------------------------------------------------ //
  76.        
  77.         // 实现filter:我自己根据上面两个补充实现的
  78.         function filter(func, array) {
  79.                 var result = [];
  80.                 forEach(array, function(elem) {
  81.                         if(func(elem))
  82.                                 result.push(elem);
  83.                 });
  84.                
  85.                 return result;
  86.         }
  87.        
  88.         // 使用filter过滤出偶数
  89.         function isEven(elem) {
  90.                 return elem % 2 == 0;
  91.         }
  92.         var array3 = [1, 2, 3, 4, 5, 6, 7, 8, 9];
  93.         var filterArray = filter(isEven, array3);
  94.         console.log(filterArray);
  95.        
  96. </script>
  97. //javascript/5857

回复 " JavaScript实现Map、Reduce和Filter"

这儿你可以回复上面这条便签

captcha