算法题8.28:求和函数

写一个求和的函数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
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,403评论 19 139
  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 14,350评论 0 33
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 11,727评论 0 17
  • 2016-07-23 万能的学长 千里姻缘一线牵SG “听说隔壁班的王大花和福禄村的李二蛋结婚了,在村口摆的酒席可...
    racelie或sea阅读 2,823评论 0 0
  • 春易老 初春的琴声缠绕梁间, 伊人正画眉。 月色朦胧情意缠绵, 残酒不消味。 初阳高照在齐州大地, 蜜芽发千枝。 ...
    硕果蕾蕾阅读 2,828评论 0 4