![](https://img.haomeiwen.com/i3452105/93c08b6354dd9600.png)
高阶函数(Higher-order function)
概念 函数可以接受另一个函数作为参数的函数称作高阶函数
高阶函数简单例子
function powAdd (x,y,f) { //计算x+y
return f(x,2) + f(y,2);
}
var f = Math.pow;
console.log(powAdd(5,6,f)); //result = 61
map() 方法创建一个新数组,其结果是该数组中的每个元素都调用一个提供的函数后返回的结果。
function sqrt(x) { //数组元素开平方根
return Math.sqrt(x);
}
var arr = [4,9,16,25,36];
console.log(arr.map(sqrt));
reduce() 方法对累加器和数组中的每个元素 (从左到右)应用一个函数,将其减少为单个值,这个函数必须接收两个参数。
var arr = [1, 3, 5, 7, 9]; //累加数组元素
var res = arr.reduce(function (x, y) {
return x + y;
});
console.log(res);
map & reduce练习
- 利用reduce()求积
var arr = [99,88,77,66];
function practices(arr) {
var res = arr.reduce(function ans(x,y) {
return x * y;
});
return res;
}
console.log(practices(arr));
- 把[1, 3, 5, 7, 9]变换成整数13579
var arr = [1,3,5,7,9];
function practice2(arr) {
var res = arr.reduce(function(x,y) {
return x * 10 + y;
});
return res;
}
console.log(practice2(arr));
- 把一个字符串13579先变成Array——[1, 3, 5, 7, 9],再利用reduce()就可以写出一个把字符串转换为Number的函数
var str = '13579';
function string2int(str) {
var res = [];
for (var i = 0; i < str.length; i++)
res[i] = str[i] - '0';
var res = res.reduce( function(x,y) {
return x * 10 + y;
})
return res;
}
console.log(string2int(str));
- 把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字。输入:['adam', 'LISA', 'barT'],输出:['Adam', 'Lisa', 'Bart']。
var arr = ['adam', 'LISA', 'barT'];
function normalize(arr) {
return arr.map(function(x) {
return x[0].toUpperCase() + x.substring(1).toLowerCase()
});
}
console.log(normalize(arr));
网友评论