JS 数组求和方法与性能比较
eval 函数
function sum(arr) {
return eval(arr.join('+'))
}
for/forEach 循环
function sum(arr) {
let res = 0
for (let i = 0, len = arr.length; i < len; i++) {
res += arr[i]
}
return res
}
function sum(arr) {
let res = 0
arr.forEach(i => res += i)
return res
}
递归 Array.prototype.slice
function sum(arr) {
const len = arr.length
switch (len) {
case 0:
return 0
case 1:
return arr[0]
break
default:
return arr[0] + sum(arr.slice(1));
}
}
Array.prototype.reduce
function sum(arr) {
return arr.reduce((curSum, curItem) => curSum + curItem)
}
执行效率
参数生成
const oriArr = Array.from(new Array(100000).keys())
运行测试
console.time('数组求和方法耗时测试')
sum(oriArr)
console.timeEnd('数组求和方法耗时测试')
统计 | ms / 1k | ms / 10k | ms / 100k |
---|---|---|---|
eval 函数 | / | / | 30.312744140625 |
for 循环 | / | / | 0.14599609375 |
forEach 循环 | / | / | 2.650146484375 |
递归 | 1 | / | 卡死 |
reduce | / | / | 2.1220703125 |
以上统计也就图一乐,实际运行耗时和电脑配置相关,不过也大致能得出一个结论,for 循环执行效率最高,递归最差,而且会产生大量堆栈导致报错甚至卡死