• Javascript实现ECMAScript 5中的map、reduce和filter函数


        // 最基础的forEach
        function forEach(array, action) {
            for (var i = 0; i < array.length; i++) {
                action(array[i]);
            }
        }
    
        // 测试forEach
        forEach(["Pear", "Apple"], function(name) {
            console.log(name);
        });
    
        // ------------------------------------------------ //
        // 实现reduce
        function reduce(combine, base, array) {
            forEach(array, function(element) {
                base = combine(base, element);
            });
            return base;
        }
    
        // 使用reduce实例1:计算数组中的0的个数
        function countZeros(array) {
            function counter(total, elem) {
                return total + (elem == 0 ? 1 : 0);
            }
    
            return reduce(counter, 0, array);
        }
    
        alert("countZeros by reduce: " + countZeros([1, 3, 0, 4, 7, 0]));
    
        // 使用reduce实例2:求和
        function sum(array) {
            function add(a, b) {
                return a + b;
            }
    
            return reduce(add, 0, array);
        }
    
        alert("sum by reduce: " + sum([1, 2, 3, 5]));
    
    
        // ------------------------------------------------ //
    
        // 实现map
        function map(func, array) {
            var result = [];
            forEach(array, function(elem) {
                result.push(func(elem));
                // 对于map,func函数一般只有一个参数,所以用func(elem)
            });
    
            return result;
        }
    
        // 利用map实现数组的每个数字翻倍
        var array = [1, 2, 3, 4, 5];
        var mappedArray = map(function(elem) {
            return elem * 2;
        }, array);
        console.log(mappedArray);
    
        // 利用map实现数组向下取整
        var array2 = [1.3, 4.5, 6.7, 8, 9.2];
        var mappedArray2 = map(Math.floor, array2);
        console.log(mappedArray2);
    
    
        // ------------------------------------------------ //
        
        // 实现filter:
        function filter(func, array) {
            var result = [];
            forEach(array, function(elem) {
                if(func(elem))
                    result.push(elem);
            });
            
            return result;
        }
        
        // 使用filter过滤出偶数
        function isEven(elem) {
            return elem % 2 == 0;
        }
        var array3 = [1, 2, 3, 4, 5, 6, 7, 8, 9];
        var filterArray = filter(isEven, array3);
        console.log(filterArray);
        
  • 相关阅读:
    graphics.drawRect()坐标解释
    点击上、下一页显示图片
    [笔记] systemverilog学习笔录
    [转帖]Verilog的语法及generate使用
    [笔记]ALTLVDS_TX和ALTLVDS_RX及Modelsim使用技巧
    [转帖]Quartus II中FPGA的管脚分配保存方法
    [笔记]8组LVDS_TX和LVDS_RX的调试心得
    [笔记]Altera中FIFO
    [笔记] 输入信号的边沿检测
    [笔记]systemverilog书本推荐
  • 原文地址:https://www.cnblogs.com/jiji262/p/3041070.html
Copyright © 2020-2023  润新知