为什么我的代码在一种环境中却不能在另一种环境中工作?

时间:2019-10-07 21:12:43

标签: javascript

我正在对Codewars做一个kata。我应该写一个返回偶数索引的函数,而不是像其他函数那样(即[1、2、4]应该返回0)。我相信我有一个解决方案,并且在复制/粘贴代码以及在freecodecamps实时服务器上进行console.logging时证明是正确的,但是,当我尝试在编写代码的地方运行代码时,它只能通过一项测试。怎么了?

我尝试使用console.logs进行测试,但是我的解决方案成立了。我知道我可以使用过滤器解决问题,但我不会练习基本原理。

let odd = [];
let even = [];

function isEven(num) {
  if (num % 2 === 0) {
    return true;
  } else {
    return false;
  }
}

function iqTest(numbers) {
  let nums = numbers.split(' ').map(function(item) {
    return parseInt(item, 10);
  })

  for (let i in nums) {
    if (isEven(nums[i])) {
      even.push(nums[i])
    } else {
      odd.push(nums[i])
    }
  }

  if (even.length > odd.length) {
    return nums.indexOf(odd[0]) + 1;
  } else {
    return nums.indexOf(even[0]) + 1;
  }
}

该函数应接受一串数字,其中之一不会是偶数或奇数,然后返回该数字的索引+ 1。

1 个答案:

答案 0 :(得分:1)

您可以采用在注释中提到的方法,搜索至少一个奇数,一个偶数和一个附加项,至少三个项,如果找到此组合,则尽早退出。

无需预先转换值,因为可以使用indexOf函数的余数运算符将值转换为数字。

要获得更快的返回值,请存储索引而不是值,并省略后面的function isEven(i) { return i % 2 === 0; } function iqTest(numbers) { var even = [], odd = [], values = numbers.split(' '); for (let i = 0; i < values.length; i++) { (isEven(values[i]) ? even : odd).push(i); if (even.length && odd.length && even.length + odd.length > 2) return (even.length < odd.length ? even : odd)[0] + 1; } } console.log(iqTest("1 2 4")); // 1 console.log(iqTest("2 4 7 8 10")) // 3 console.log(iqTest("1 2 1 1")); // 2搜索。

{{1}}