JavaScript实现Map、Reduce和Filter
2014-07-03 16:17
281 查看
1. [代码][JavaScript]代码
<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); http://www.huiyi8.com/css3/ css3教程
// 利用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>
<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); http://www.huiyi8.com/css3/ css3教程
// 利用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中的filter,map,reduce
- JavaScript实现Map、Reduce和Filter
- 使用python实现内置map,filter,reduce,zip函数
- JavaScript的map/reduce/filter/sort 高阶函数
- 一张图看懂JavaScript中数组的迭代方法:forEach、map、filter、reduce、every、some
- JavaScript中的map和filter、reduce方法
- js map, reduce, forEach, filter的一般实现
- 无循环 JavaScript(map、reduce、filter和find)
- 一张图看懂JavaScript中数组的迭代方法:forEach、map、filter、reduce、every、some
- JavaScript中数组的迭代方法:forEach、map、filter、reduce、every、some
- <JavaScript学习>高阶函数:map/reduce,filter,sort
- Map-Reduce实现Join 算法(mapreduce侧连接 maponly 连接 map bloomfilter reduce连接) (join二)
- JS学习笔记1——不要使用JavaScript内置的parseInt()和Number()函数,利用map和reduce操作实现一个string2int()函数
- javascript利用map,every,filter,some,reduce,sort对数组进行最优化处理
- [置顶] JAVASCRIPT中数组的迭代方法:FOREACH、MAP、FILTER、REDUCE、EVERY、SOME各个说明
- javascript中数组的迭代方法对比:forEach()、map()、reduce()、some()、every()、filter()图解
- 3.python中map,filter,reduce以及内部实现原理剖析
- javaScript 高阶函数 map/reduce/filter
- javaScript循环总结(for,for-in,for-of,forEach,map,filter,every,reduce,reduceRight)