zoukankan      html  css  js  c++  java
  • 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);
        
  • 相关阅读:
    合并、媒体查询
    混入、命名空间(less)、继承
    函数(内置函数 和 自定义函数)
    运算、单位、转义、颜色
    选择器嵌套、伪类嵌套、属性嵌套(只在Sass中)
    注释、变量、插值、作用域
    二路归并排序java实现
    堆排序Java实现
    和为S的连续正数序列——牛客网(剑指offer)
    transient 与 volatile 笔记
  • 原文地址:https://www.cnblogs.com/jiji262/p/3041070.html
Copyright © 2011-2022 走看看