【问题标题】:How can I optimize this JS code for Codewars?如何为 Codewars 优化此 JS 代码?
【发布时间】:2021-12-15 23:28:26
【问题描述】:

任务是:

给定一个数字数组,返回一个长度为 number 的新数组,其中包含原始数组中的最后一个偶数(以相同的顺序)。

Codewars 编译器显示“执行超时(12000 毫秒)”错误,但代码按预期工作。 请帮助优化我的代码,因为我自己搞不明白

我的代码:

function evenNumbers(array, number) {
  for (let i=0; i < array.length; i++) {
    if (array[i] % 2 != 0) {
      array.splice(i, 1); 
      i -= 1;
    }
  }
  array.splice(0, array.length - number)
  return array;
}

【问题讨论】:

    标签: javascript loops optimization


    【解决方案1】:

    您正在遍历整个数组,但您只需要遍历 number 元素。例如,给定一个为 5 的 number,您只需要迭代直到找到满足条件的 5 个值 - 如果不需要,您不希望迭代所有 10,000 长度的数组。 (Codewars 测试通常具有如此庞大的对象结构。)

    它还说返回一个新数组,而不是修改现有数组。

    const evenNumbers = (array, number) => {
      const newArr = [];
      for (let i = array.length - 1; i >= 0 && newArr.length <= number; i--) {
        if (array[i] % 2 === 0) newArr.unshift(array[i]);
      }
      return newArr;
    };
    
    console.log(evenNumbers(
      [1, 2, 3, 4, 5, 6, 7, 8],
      3
    ));

    【讨论】:

    • 谢谢!我会记住要更仔细地阅读问题,并尽量减少循环中的迭代。我已经重新编写了与您的代码相似的代码,但注意到循环中的第二个条件必须是“ newArr.length
    猜你喜欢
    • 2022-10-24
    • 2020-09-02
    • 1970-01-01
    • 2011-04-09
    • 2015-09-19
    • 1970-01-01
    • 1970-01-01
    • 2015-07-12
    • 1970-01-01
    相关资源
    最近更新 更多