在JavaScript中计算数组的数值之和

时间:2018-02-26 09:52:11

标签: javascript arrays

我有以下数组:

myArray = [32.4, "bla", 1.44, 0.5, 65.8, "abc"];

计算仅包含数字的数组的sum非常简单,但如果还有非数值必须忽略,怎么办呢?

7 个答案:

答案 0 :(得分:3)

使用.reduce并使用isNaN()

检查元素是否为数字

如果要添加代表数字的字符串,可以使用:



var myArray = [32.4, "bla", 1.44, 0.5, 65.8, "abc"];
var sum = myArray.reduce((acc, el) => acc + (!isNaN(el) ? +el : 0));
console.log(sum);




如果您想忽略代表数字"1"的字符串,请使用typeof



var myArray = [32.4, "bla", 1.44, 0.5, 65.8, "abc"];
var sum = myArray.reduce((acc, el) => acc + (typeof el === "number" ? el : 0));
console.log(sum);




答案 1 :(得分:3)

将所有内容解析为数字并检查NaN

var sum = 0
myArray.forEach(el => {
   if(!Number.isNaN(parseFloat(el))) sum += parseFloat(el)
})

此解决方案也适用于表示数字的数组,如[" 4.5"," 5"," a",10](将给出19.5) 如果您不想要这种行为,最好检查以下类型:

var sum = 0
myArray.forEach(el => sum += (typeof el == "number" ? el : 0))

答案 2 :(得分:2)

您可以使用reduce()功能与.isNaN()相结合来检查您是否有号码。



<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="myApp">
    <div ng-controller="SubscriptionCtrl as subscription">
        <form ng-submit="subscription.redeem()">
            <input class="text-uppercase" type="number" ng-maxlength="6" placeholder="Indtast kode" ng-model="subscription.accessCode" />
            <input type="submit" class="btn btn-dark-green" value="Indløs" />
        </form>
    </div>
</div>
&#13;
&#13;
&#13;

答案 3 :(得分:2)

您可以使用.skin-blue .main-header .navbar {background-color: #3333cc} .skin-blue .main-header .navbar .sidebar-toggle:hover {background-color: red} .skin-blue .main-header .logo {background-color: #3333cc;border-bottom: 0 solid transparent;} .skin-blue .main-header .logo:hover {background-color: #3333cc;} .content-wrapper {float:top;} .wrapper {overflow-y: hidden;} .main-header { max-height: 200px !important; } .sidebar-toggle { float: right !important; } .main-header .logo { line-height: 85px !important; padding: 0px 0px; } array.prototype.filter

&#13;
&#13;
array.prototype.reduce
&#13;
&#13;
&#13;

答案 4 :(得分:1)

使用reduceisNaN

var arr = [32.4, "bla", 1.44, 0.5, 65.8, "abc"];
var output = arr.reduce( ( a, c ) => a + ( isNaN( c ) ? 0 : c ), 0 );

<强>演示

&#13;
&#13;
var arr = [32.4, "bla", 1.44, 0.5, 65.8, "abc"];
var output = arr.reduce( ( a, c ) => a + ( isNaN( c ) ? 0 : c ), 0 );
console.log( output.toFixed(2) );
&#13;
&#13;
&#13;

<强>解释

  • 使用reduce将累加器a初始化为0
  • 使用isNaN检查c(当前迭代的数组项) Is-Not-A-Number (如果没有将0添加到{{ 1}})

答案 5 :(得分:1)

var numbers = myArray.map(value => {
    value = parseFloat(value);
    return (isNaN(value))? 0: value;
});

然后计算numbers

的总和

答案 6 :(得分:0)

我甚至会将上面的两个答案结合起来并使用常见的 Map Reduce 策略:

var numbers = myArray.map((value) => {
    value = parseFloat(value);
    if(isNaN(value)) value = 0;
}).reduce(function(acc, curr){
  return acc + (isNaN(curr) ? 0 : curr);
});

当然你可以在Map或reduce函数中按下所有内容,但是当我被教导时,Map函数以适当的形式准备值,然后reduce函数的目标只是将所有可用值组合到使用给定功能/策略的单个人。

(如果出现语法错误,我很抱歉,我只在Swift atm进行编码。)