Loading

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 循环执行效率最高,递归最差,而且会产生大量堆栈导致报错甚至卡死

posted @ 2020-06-14 15:22  Frank-Link  阅读(780)  评论(0)    收藏  举报