Ошибка: «не удается прочитать свойство «div» неопределенного»

#javascript #function #if-statement

#javascript #функция #if-оператор

Вопрос:

Я продолжаю получать эту ошибку

«Не удается прочитать свойство «div» неопределенного»

Это мой код

 
function checkCard(){
    for(let i = 0; i < 13; i  ){
        if(animalNums[i].animal.textContent === findArray[i].div.textContent){
            animalNums[i].animal.style.display = "block"
            animalNums[i].animal.classList.add("animate");
            setTimeout(function(){animalNums[i].animal.classList.remove("animate");},1001)
            score  = 1
            document.getElementById("scoreP").innerHTML = `Score: ${score}` 
        }
    }
}
 

В нем говорится, что findArray[i].div не определен
, вот массив, на который он ссылается :

 let findArray = [ 
    {
       div: document.getElementById("findOne")
    },
    {
       div: document.getElementById("findTwo")
    },
    {
       div: document.getElementById("findThree")
    }
]

 

Я не уверен, почему это происходит, поскольку я считаю, что я выполнил очень похожую функцию, которая работала раньше. Это как-то связано с областью видимости?

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

1. Можете ли вы консольно протоколировать массив внутри вашей функции?

2. Один вопрос… почему? Не могли бы вы сделать то же самое, используя то же имя класса и выполняя селектор в классе во время цикла по классу? Я думаю, что нет, потому что только от 0 до 2 «получают» в операторе findArray[i].div.textContent if, в то время как фактический цикл рассчитан на 0-12.

Ответ №1:

Наиболее вероятная причина, по которой это происходит, заключается в том, что вы выполняете итерацию по массиву со значением 'i' , которое больше, чем сама длина массива. Вы используете значение i < 13 и увеличиваете «i». Возможно, ваш массив содержит менее 12 элементов, и когда вы пытаетесь получить значение по 12-му индексу, вы получаете «undefined», потому что в этом значении нет индекса 'i' . Также здесь следует иметь в виду, что массивы основаны на 0.

Поскольку вы не поделились всем массивом, поэтому я не могу сказать наверняка, но вы можете просмотреть приведенный ниже фрагмент примера, чтобы понять, что я хочу сказать:

 let findArray = [
  {
    div: document.getElementById("findOne"),
  },
  {
    div: document.getElementById("findTwo"),
  },
  {
    div: document.getElementById("findThree"),
  },
];

(function checkCard() {
  for (let i = 0; i < 4; i  ) {
    console.log(i, findArray[i].div);
  }
})(); 
 <div id="findOne"></div>
<div id="findTwo"></div>
<div id="findThree"></div> 

Поэтому лучше сделать здесь, а не передавать жестко заданное значение i < 13 , это передать значение i < findArray.length свойства to be, как показано ниже:

     let findArray = [
      {
        div: document.getElementById("findOne"),
      },
      {
        div: document.getElementById("findTwo"),
      },
      {
        div: document.getElementById("findThree"),
      },
    ];

    (function checkCard() {
      for (let i = 0; i < findArray.length; i  ) {
        console.log(i, findArray[i].div);
      }
    })(); 
 <div id="findOne"></div>
    <div id="findTwo"></div>
    <div id="findThree"></div> 

Ответ №2:

@sabbir.alam Да, я могу утешить.запишите массив внутри функции.

@ShaneerM13 Да, я не уверен, что это лучший способ написать это. Я больше хотел показать ошибку, которую я получаю, потому что это происходит с множеством разных функций.

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

1. Какова длина вашего массива? Сколько в нем элементов?