【问题标题】:JavaScript how to evaluate type of variable and return sum of an arrayJavaScript如何评估变量的类型并返回数组的总和
【发布时间】:2014-07-11 19:01:48
【问题描述】:

所以我正在尝试编写一个函数来评估一个数组,并且只输出数组中所有数字变量的总和。例如,如果我输入数组 [1,2,3,"chunky bacon", 5, false],它只会将 1,2,3,和 5 相加,因此返回 11。 这是我写的:

var sum = function(num) {
    var total = 0;
    for (var i = 0; i < num.length; i++) {
        if (typeof i == "number") {
            total += num[i];
        };
    };
    console.log(total);
}

但是,当我在控制台中使用 [1,2,3,"chunky bacon", 5, false] 对其进行测试时,它会返回

6chunky bacon5false

所以我的问题是 1)如何让循环在遇到无数字元素时不停止,所以在上面的示例中它将继续将 6 与 5 相加? 2)如何让它停止打印无数字元素?我不知道为什么它会打印出来,因为我只说 console.log(total)。

感谢您的帮助!

【问题讨论】:

  • myArray.filter(Number).reduce(sum)
  • @dandavis:要是 JavaScript 有一个 sum 全局就好了。我猜.reduce(function(a, b) { return a + b }, 0) 也可以。
  • 我想你的意思是if (typeof num[i] == "number") {。在循环中,i(递增的索引)将始终是一个数字。您似乎想检查数组中的值,即num[i]
  • 是的,我每晚都为 Math.sum 和 Math.diff 祈祷,这样我们就可以对数组进行快速的原生数学运算。

标签: javascript arrays sum typeof


【解决方案1】:

(typeof i == "number") 始终是一个数字,因为 "i" 是您的循环计数器。你应该使用

if (typeof num[i] == "number")

(sn-p 未测试)

【讨论】:

    【解决方案2】:

    您可以通过根据数组值检查 isNaN 来解决此问题。

    var array = [1, 2, 3, "chunky bacon", 5, false];
    
    var sum = function(arr) {
        var a = 0;
        var b = arr.length;
        for ( c = 0; c < b; c++ ) {
            if ( !isNaN(arr[c]) ) {
                a += arr[c];
            }
        }    
        return a;
    }
    
    console.log(sum(array));
    

    这是一个工作示例:http://jsfiddle.net/KA827/1/

    【讨论】:

    • 这不起作用,因为它没有正确处理元素为空字符串 ("") 的情况。它将通过检查并将 sum 变量转换为字符串,并开始连接未转换为 NaN 的数字和其他元素。例如,数组:var array = [1, "", "chunky bacon", 2, false]; 将打印 12false 而不是 3;
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-29
    • 1970-01-01
    • 2021-06-28
    • 2015-01-02
    • 1970-01-01
    • 1970-01-01
    • 2018-07-10
    相关资源
    最近更新 更多