我不明白为什么我的代码返回undefined

我试图解决给定的挑战。

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

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

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

输入: [ 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 ]));

回答

那是因为你拼错lengthlengh。更改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。然后我遍历对象的属性并检查哪一个出现奇数次。请注意,如果有多个数字出现奇数次,则将返回找到的第一个数字。


以上是我不明白为什么我的代码返回undefined的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>