用map和reduce把string转成number

用map和reduce把string转成number

4 年前

简单介绍:

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;