Найдите тот, который появляется нечетное количество раз. Странные обезьяны однажды

#javascript #arrays

Вопрос:

 function findOdd(A) {

  var count = 0;
  
  for (var i = 0; i < A.length; i  ){
    for( let j = 0; j < A.length; j  ){
       if(A[i]=== A[j]){
          count = count   1;
        }
        if(count % 2 ===0){
            count = 0;
        }else{
          var n = A[i];
          }
     }

    
   }    
  return n
  
}
 

Это мой код, для которого я использовал вложенность, и результат всегда является последним элементом массива, почему?

Комментарии:

1. Как вы вызываете функцию?

2. @otejiri-это упражнение для кодирования, имя функции-findOdd.

Ответ №1:

На вашей последней итерации, i = A.length , и j = A.length . Затем вы проверяете , так ли A[i] === A[j] это. Вы установили count = count 1 , так оно и будет 1 (почти всегда, так как есть только один нечетный, и в любое время вы устанавливаете четный счет count = 0 ). 1 % 2 !== 0 таким образом, вы фактически (почти) всегда будете настроены n на A[A.length -1]

 const findOdd = (arr) => {
    for (let i = 0; i < arr.length; i  ) {
        // arr[i] is the first instance, so set count to 1
        let count = 1;
        // start checking at the next element
        for (let j = i 1; j < arr.length; j  ) {
            // if they are the same, increment count
            if (arr[i] === arr[j]) {
                count  ;
                // remove the current element, so we don't 
                // check it again using i
                arr.splice(j, 1);
                // go back, since we need to re-check this index since
                // we just removed the item that was at this index
                j--;
            }
        }
        // if it's odd, return now
        if (count % 2 !== 0) return arr[i];
    }          
}

console.log(findOdd(['a','a','b','b','c','d','d']))