如何總結這樣的陣列 [ '', '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