一、概念
高阶函数就是函数的参数也是一个函数。
function add(x, y, f) {return f(x) + f(y);}var result = add(-5, 9, Math.abs)console.log(result) // output: 14
二、map
map() 方法会创建一个新数组,这个新数组是由原来的数组的每一个元素调用一次提供的函数后的返回值组成的。
对 arr 数组的每一个值执行 pow 函数操作,省去编写 for 循环。
'use strict';function pow(x) {return x * x;}var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];var results = arr.map(pow); // output: [1, 4, 9, 16, 25, 36, 49, 64, 81]console.log(results);
数组所有值转为 String
var arr = [1, 2, 3, 4, 5];var strArr = arr.map(String);console.log(strArr); // output: ["1", "2", "3", "4", "5"]
三、reduce
reduce() 接受两个参数,进行一次运算后,把这次运算的结果作为下一次运算的第一个参数。[x1, x2, x3, x4].reduce(f) = f(f(f(x1, x2), x3), x4)x1 和 x2 进行运算后比如说生成 y1,y1 作为新的第一个参数,之后 y1 与 x3 进行运算生成 y2 ,依次进行。
接下来做一些练习。
3.1 求和
var arr = [1, 2, 3, 4, 5]var value = arr.reduce(function(x, y) {// 实现数组的总和return x + y;})console.log(value); // output: 15
3.2 求积
var arr = [1, 2, 3, 4, 5]var value = arr.reduce(function(x, y) {// 求积return x * y;})console.log(value); // output: 120
3.3 字符串转数字
/*** 将字符串转为数字* @param s 字符串* @returns*/function string2int(s) {if (s.length == 1) {let k = s - 0;return k;}// 先把字符串转为数组var strArr = s.split("")// 将数组转为 numbervar k = strArr.reduce(function(x, y) {return x + y - 0;})// console.log(typeof(k)); // number// console.log(k);return k;}console.log(string2int('123456')); // output: 123456console.log(string2int('12300')); // output: 12300console.log(string2int('0')); // output: 0console.log(string2int('0123')); // output: 123
3.4 规范英文名称
/*** 使英文名称规范,第一个字母大写,其余小写* @param {* } arr* @returns*/function normalize(arr) {// 获取第一个字母然后转为大写,获取剩下的字母转为小写,然后将两个拼接return arr.map(item =>item.slice(0, 1).toUpperCase() + item.slice(1).toLowerCase())}console.log(normalize(["abCD", "abcD", "AbcD"])); // output:["Abcd","Abcd","Abcd"]
3.5 字符串转整数
'use strict';var arr = ['1', '2', '3'];var r = arr.map(item =>parseInt(item));console.log(r); // output: [1, 2, 3]
'use strict';var arr = ['1', '2', '3'];var r = arr.map(Number);console.log(r); // output: [1, 2, 3]
