You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何优化Codewars平台上报超时错误的JS偶数筛选代码?

超时原因

你原来的代码性能瓶颈出在for循环里多次调用splice删除元素:splice操作会直接修改原数组,每次删除元素都需要移动被删除位置之后的所有元素,时间复杂度为O(n)。如果原数组长度很大,整体时间复杂度会升高到O(n²),很容易触发超时。此外原代码直接修改传入的数组参数,会产生额外的副作用。


优化方案

优化核心是把时间复杂度降到O(n),同时避免无意义的数组元素移动操作,以下是两种常用实现:

方案1:倒序遍历提前终止(性能最优)

从数组末尾开始遍历,收集到指定数量的偶数后就终止循环,无需遍历整个数组,在目标数量远小于数组总长度时性能优势更明显:

function evenNumbers(array, number) {
  const result = []
  // 倒序遍历,收集够指定数量偶数就停止
  for (let i = array.length - 1; i >= 0 && result.length < number; i--) {
    if (array[i] % 2 === 0) {
      result.push(array[i])
    }
  }
  // 反转恢复原数组中的相对顺序
  return result.reverse()
}

方案2:过滤+切片(写法最简洁)

先一次性过滤出所有偶数,再直接截取最后number个元素,代码可读性更高:

function evenNumbers(array, number) {
  return array.filter(num => num % 2 === 0).slice(-number)
}

内容的提问来源于stack exchange,提问作者Stanislav Tiryoshin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 10:18:01