我有以下数组:
myArray = [32.4, "bla", 1.44, 0.5, 65.8, "abc"];
计算仅包含数字的数组的sum
非常简单,但如果还有非数值必须忽略,怎么办呢?
答案 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;
答案 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
:
array.prototype.reduce
&#13;
答案 4 :(得分:1)
使用reduce
和isNaN
var arr = [32.4, "bla", 1.44, 0.5, 65.8, "abc"];
var output = arr.reduce( ( a, c ) => a + ( isNaN( c ) ? 0 : c ), 0 );
<强>演示强>
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;
<强>解释强>
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进行编码。)