一、eval
尽量别用eval求和
function sum(arr) {
return eval(arr.join("+"))
}
二、循环
for, forEach, reduce均可
function mySum(arr) {
return arr.reduce((prev, curr) => {
return prev + curr
}, 0)
}
三、入参检查
实际使用需要检查输入数值是否规范:
首先,入参必须是非空数组;其次,数组元素必须是数字
如果入参不规范,则手动抛出异常。使用求和函数时,捕捉并处理该异常,避免其中断程序的执行
function mySum(arr) {
if(!arr || !(arr instanceof Array)) return
return arr.reduce((prev, curr) => {
if(!parseFloat(curr)) {
throw new Error('Can\'t sum with value: ' + curr)
}
return prev + parseFloat(curr)
}, 0)
}
// TEST
let arr = [1,2,'a']
try {
mySum(arr)
} catch (err) {
console.log(err.message || err)
}
// Can't sum with value: a
let arr1 = [
{ no: 'NO1', value: 10 },
{ no: 'NO2', value: '100' },
{ no: 'NO3', value: '1' }
]
try {
mySum(arr1.map(p => p.value))
} catch (err) {
console.log(err.message || err)
}
// 111