如何总结这样的阵列 [ '', '4490449', '2478', '1280990', '22296892', '244676', '1249', '13089', '0', '0', '0\n' ]
如何总结一个字符串数组,代表整数
如果我把类似的东西['','4490449', ... , '0\n' ].reduce(function(t,s){ return t+s)
该阵列上的刺结合,而不是相加。
我已经尝试了一些铸造用parseInt()
但这会导致NaN
:)
如何总结这样的阵列 [ '', '4490449', '2478', '1280990', '22296892', '244676', '1249', '13089', '0', '0', '0\n' ]
如何总结一个字符串数组,代表整数
如果我把类似的东西['','4490449', ... , '0\n' ].reduce(function(t,s){ return t+s)
该阵列上的刺结合,而不是相加。
我已经尝试了一些铸造用parseInt()
但这会导致NaN
:)
你需要确保你所求和的值是整数。这里是一个可能的解决方案:
var ary=[ '', '4490449', '2478', '1280990', '22296892',
'244676', '1249', '13089', '0', '0', '0\n' ];
console.log(
ary
.map(function(elt){ // assure the value can be converted into an integer
return /^\d+$/.test(elt) ? parseInt(elt) : 0;
})
.reduce(function(a,b){ // sum all resulting numbers
return a+b
})
);
其打印“28329823”到控制台。
我认为你应该从该正则表达式中删除'$'; 'parseInt'忽略后面的非数字(例如''32a''变成'32'),OP的例子包含“0 \ n''作为一个元素。 (当然,你的版本会将'0 \ n''转换为'0',但这主要是巧合。) – ruakh
虽然你说的是真的,但我相信期望的是字符串应该表示数字整数值,其中'0 \ n'没有。 –
你有你的数组中的某些值不是整数。让我们假设他们都是,那么你可以这样做:
['4490449', '2478', '1280990', '22296892', '244676', '1249', '13089'].reduce(
function(t, s) {
return parseInt(t) + parseInt(s);
}
);
见捣鼓这似乎是确定的工作:
var arry = [ 'asdf', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'ham10am' ];
var res = arry.reduce(function(prev, curr){
return (Number(prev) || 0) + (Number(curr) || 0);
});
console.log(res); // prints 45
这也允许加入小数。 – Shmiddty
试试这个:
var sum = 0,
arr = [ '', '1', '2', '3.0','4\n', '0x10' ],
i = arr.length;
while(i--) {
// include radix otherwise last element gets interpreted as 16
sum += parseInt(arr[i], 10) || 0;
}
console.log(sum) // sum => 10 as 3.0 and 4\n were successfully parsed
小提琴here
你在使用parseInt函数正确的。
但是您需要将它用于每个reduce参数。
此外,您还需要检查每个parseInt的结果是否是一个数字,因为如果不是,函数将尝试用NaN求和一个数字,其他所有和数将最终成为NaN。
Mozilla公司的EcmaScript documentation on parseInt说:
如果第一个字符不能被转换成数字,parseInt函数 返回NaN。
然后,为了避免让NaN的破坏你的目标,你可以实现这样的:
function parseIntForSum(str) {
var possibleInteger = parseInt(str);
return isNaN(possibleInteger) ? 0 : possibleInteger;
}
function sum(f, s) {
return parseIntForSum(f) + parseIntForSum(s);
}
window.alert('sum = ' + [ '', '4490449', '2478', '1280990', '22296892', '244676', '1249', '13089', '0', '0', '0\n' ].reduce(sum));
下面是与它的jsfiddle工作:http://jsfiddle.net/cLA7c/
'“”'并没有真正的代表一个整数;你如何期待它被处理? – ruakh
我的意思是''可以代表零或? – zzeroo