[JavaScript基础]学习①④--高阶函数map/reduce

参考地址
http://www.liaoxuefeng.com/wiki/001434446689867b27157e896e74d51a89c25cc8b43bdb3000/001435119854495d29b9b3d7028477a96ed74db95032675000

map

function pow(x) {
    return x * x;
}

var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
arr.map(pow); // [1, 4, 9, 16, 25, 36, 49, 64, 81]

相当于

var f = function (x) {
    return x * x;
};

var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
var result = [];
for (var i=0; i

把Array的所有数字转为字符串

var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
arr.map(String); // ['1', '2', '3', '4', '5', '6', '7', '8', '9']

reduce

把一个函数作用在这个Array的[x1, x2, x3...]上,这个函数必须接收两个参数,reduce()把结果继续和序列的下一个元素做累积计算

var arr = [1, 3, 5, 7, 9];
arr.reduce(function (x, y) {
    return x + y;
}); // 25

练习:利用reduce()求积

'use strict';
function product(arr) {
     return arr.reduce((x, y)=>x*y);
}


练习 首字母大写,其他小写的规范名字

'use strict';

function normalize(arr) {
 return arr.map(x=>x.substr(0,1).toUpperCase()+x.substr(1).toLowerCase());
}

把[1, 3, 5, 7, 9]变换成整数13579

var arr = [1, 3, 5, 7, 9];
arr.reduce(function (x, y) {
    return x * 10 + y;
}); // 13579

字符串转换为Number

'use strict';

function string2int(s) {
    return s.split("").map(x=>x*1).reduce(function(x, y) {
      return x*10 + y;
  });
}

练习

'use strict';

var arr = ['1', '2', '3'];
var r;
r = arr.map(parseInt);
alert('[' + r[0] + ', ' + r[1] + ', ' + r[2] + ']');

结果是[1, NaN, NaN]

由于map()接收的回调函数可以有3个参数:callback(currentValue, index, array),通常我们仅需要第一个参数,而忽略了传入的后面两个参数。不幸的是,parseInt(string, radix)没有忽略第二个参数,导致实际执行的函数分别是:

parseInt('0', 0); // 0, 按十进制转换

parseInt('1', 1); // NaN, 没有一进制

parseInt('2', 2); // NaN, 按二进制转换不允许出现2

可以改为r = arr.map(Number);,因为Number(value)函数仅接收一个参数。
或r=arr.map(parseInt=>parseInt);

你可能感兴趣的:([JavaScript基础]学习①④--高阶函数map/reduce)