用map和reduce把string转成number
简单介绍:
map: map方法定义在Array对象中,调用Array对象的map方法时,可以传入我们自己定义的函数,并返回一个新的Array。
例子:求数组中每个元素的平方,并返回新的数组。
'use strict'
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]
var result = arr.map(function (x) { // map 中传入的是我们自己定义的函数
return x * x
console.log(arr) // [1, 2, 3, 4, 5, 6, 7, 8, 9]
console.log(result) // [1, 4, 9, 16, 25, 36, 49, 64, 81]
reduce: Array对象的reduce方法,要求传入两个参数,并返回函数累计处理的结果。
语法:
arr.reduce(callback[, initialValue])
- callback:对数组中的每个值都执行一次这个函数。
- initialValue:初始值。如果没有提供初始值,就将数组中的第一个元素作为初始值。
例子:求数组中每个元素相加的总和。
'use strict'
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]
var sum = arr.reduce(function (x, y) { // reduce 中是自己定义的callback函数
return x + y
console.log(sum) // 45
现在来看文章标题提出来的问题。
需求: 不使用JavaScript内置的parseInt函数和Number函数,利用map和reduce实现一个StringToNumber()函数。
思路:
- 把字符串变成字符串数组;
var str = '123456789'
var result = str.split('')
console.log(result) // ["1", "2", "3", "4", "5", "6", "7", "8", "9"]
- 用map,把字符串数组变成数值数组;
var arr = ["1", "2", "3", "4", "5", "6", "7", "8", "9"]
var result = arr.map(function (data) {
return +data
console.log(result) // [1, 2, 3, 4, 5, 6, 7, 8, 9]
- 用reduce,把数值数组变成整数。
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]
var result = arr.reduce(function (x, y) {
return x*10 + y
console.log(result) // 123456789
JavaScript 代码实现(将以上代码整合):
'use strict';
function StringToNumber(string) {
function strToNum(str){
var strArr = str.split(''); // 把字符串分割成数组
var numArr = strArr.map(function (x) { // 通过map()把字符串数组转换成数字数组
return +x // +号可以把字符串类型转成数值类型
return numArr;
var num = strToNum(string);
var result = num.reduce(function (x,y) { //通过reduce()把数字数组转换成整数
return x*10+y;
return result;