首页 > 解决方案 > 我无法弄清楚为什么我的代码返回未定义

问题描述

我试图解决给定的挑战。

我找不到为什么我的代码没有返回值的问题。

给定一个整数数组,找出出现奇数次的那个。

总是只有一个整数出现奇数次。

输入:[20、1、-1、2、-2、3、3、5、5、1、2、4、20、4、-1、-2、5]

function findOdd(array) {
  let answer
  for (let i = 0; i<array.length; i++){
        let counter = 0;
        const value = array[i]
        
        for(let k = 0; k < array.lengh; k++){
           if( value == array[k]){
              counter++
           }
          if(counter % 2 !== 0){
              answer = value;
          }
    }
  }
  return answer
}

 console.log(findOdd([ 20, 1, -1, 2, -2, 3, 3, 5, 5, 1, 2, 4, 20, 4, -1, -2, 5 ]));

标签: javascript

解决方案


那是因为你拼错length了 as lengh。更改for(let k = 0; k < array.lengh; k++){for(let k = 0; k < array.length; k++){

请注意,即使您更正它,您的代码仍然无法执行您想要的操作,它仍然无法找到在特定输入中出现奇数次的数字。

这是我编写的代码,可以帮助您实现所需的目标:

function findOdd(array) {
  let occurences = {};

  array.forEach(num => {
    if (!occurences.hasOwnProperty(num)) {
      occurences[num] = 1;
    } else {
      occurences[num] += 1;
    }
  })

  for (let key in occurences) {
    if (occurences.hasOwnProperty(key) && occurences[key] % 2 == 1) {
      return key;
    }
  }
}

console.log(findOdd([1, 1, 1, 1, 1, 1, 10, 1, 1, 1, 1]));

我首先在对象中添加所有数字及其出现occurrences。然后我遍历对象的属性并检查哪个属性出现奇数次。请注意,如果有多个数字出现奇数次,则将返回找到的第一个。


推荐阅读