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  阅读(739)  评论(0编辑  收藏  举报