• 欢迎访问开心洋葱网站,在线教程,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入开心洋葱 QQ群
  • 为方便开心洋葱网用户,开心洋葱官网已经开启复制功能!
  • 欢迎访问开心洋葱网站,手机也能访问哦~欢迎加入开心洋葱多维思维学习平台 QQ群
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏开心洋葱吧~~~~~~~~~~~~~!
  • 由于近期流量激增,小站的ECS没能经的起亲们的访问,本站依然没有盈利,如果各位看如果觉着文字不错,还请看官给小站打个赏~~~~~~~~~~~~~!

JavaScript实现Map、Reduce和Filter

JavaScript 水墨上仙 1526次浏览

JavaScript实现Map、Reduce和Filter

<script type="text/javascript">
	// 函数式编程:
	// 描述我们要做什么,而不是我们如何去做。这意味着我们工作在一个更高的抽象层次。函数式编程将导致更精巧、清晰和令人愉快的代码。
	// 最基础的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);
	
</script>


开心洋葱 , 版权所有丨如未注明 , 均为原创丨未经授权请勿修改 , 转载请注明JavaScript实现Map、Reduce和Filter
喜欢 (0)
加载中……