我不明白为什么我的代码返回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 ]));
回答
那是因为你拼错length了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。然后我遍历对象的属性并检查哪一个出现奇数次。请注意,如果有多个数字出现奇数次,则将返回找到的第一个数字。