算法题8.28:求和函数

2017-08-29  本文已影响0人  txwslyf

写一个求和的函数sum,达到下面的效果:
// Should equal 15
sum(1, 2, 3, 4, 5);
// Should equal 0
sum(5, null, -5);
// Should equal 10
sum('1.0', false, 1, true, 1, 'A', 1, 'B', 1, 'C', 1, 'D', 1,
'E', 1, 'F', 1, 'G', 1);
// Should equal 0.3, not 0.30000000000000004
sum(0.1, 0.2);

function sum() {
    let args = Array.prototype.slice.call(arguments)
    let sum = 0
    let max = 0
    let numberArr = []

    args.forEach(function (item) {
        let number
        let match = false
        let length = 0

        //将字符串或者数字转换成Number对象,true,false,null要单独考虑
        // 因为Number(true) === 1,Number(false||null) === 0
        if (item === true || item === false || item === null) {
            number = NaN
        }
        else {
            number = Number(item)
        }

        if (!isNaN(number)) {
            numberArr.push(number)
            match = /[0-9]+\.([0-9]+)/.exec(number.toString())
            if (match) {
                length = match[1].length
            }
            if (length > max) {
                max = length
            }
        }
    })

    numberArr.forEach(function (item) {
        sum = sum + item * Math.pow(10, max)
    })
    sum = sum / Math.pow(10, max)
    return sum
}
上一篇 下一篇

猜你喜欢

热点阅读