1. 程式人生 > >JS學習筆記1——不要使用JavaScript內建的parseInt()和Number()函式,利用map和reduce操作實現一個string2int()函式

JS學習筆記1——不要使用JavaScript內建的parseInt()和Number()函式,利用map和reduce操作實現一個string2int()函式

map/reduce練習題:不要使用JavaScript內建的parseInt()和Number()函式,利用map和reduce操作實現一個string2int()函式。

分析:把一個字串"13579"先變成Array——[1, 3, 5, 7, 9],再利用reduce()就可以寫出一個把字串轉換為Number的函式。

程式碼如下:

'use strict';

function string2int(s) {
    function str2num(str){
        var strArr = str.split('');               //把字串分割成字串陣列
        function toInt(data){
            return +data;                  //通過js的弱型別轉換,實現字元型別到數字型別的轉換
        }
        var numArr = strArr.map(toInt);           //通過map()把字串陣列轉換成數字陣列
        return numArr;
    }
    var num = str2num(s);
    var res = num.reduce(function (x,y) {        //通過reduce()把數字陣列轉換成數字量
        return x*10+y;
    });
    return res;
}

// 測試:
if (string2int('12345') === 12345 && string2int('12300') === 12300) {
    if (string2int.toString().indexOf('parseInt') !== -1) {
        alert('請勿使用parseInt()!');
    } else if (string2int.toString().indexOf('Number') !== -1) {
        alert('請勿使用Number()!');
    } else {
        alert('測試通過!');
    }
}
else {
    alert('測試失敗!');
}

注:map()是陣列Array的一個方法,傳入一個指定方法,返回一個由原陣列中的每個元素呼叫一個指定方法後的返回值組成的新陣列。

Array的reduce()把一個函式作用在這個Array[x1, x2, x3...]上,這個函式必須接收兩個引數,reduce()把結果繼續和序列的下一個元素做累積計算,其效果就是:

[x1, x2, x3, x4].reduce(f) = f(f(f(x1, x2), x3), x4)
js中把字元型別轉成數字型別的方法主要有三種:轉換函式parseInt()、強制型別轉換Number()、利用js變數弱型別轉換。