JS не может вызывать функцию для элементов массива - PullRequest
0 голосов
/ 17 июня 2020

Я создал функцию для проверки массива, делится ли элемент массива на следующий элемент. Если нет, то должен удалить следующий элемент из массива.

Я создал тестовый массив, состоящий из двух массивов. Когда я l oop поверх них и console.log, они возвращаются, как ожидалось.

Когда я вызываю свою функцию (deleteItem) в for l oop вместо console.log, она просто возвращает результат первого элемента массива, а не второго. Я очень запутался и не понимаю этого. Может ли кто-нибудь подсказать, что я делаю неправильно?

Заранее спасибо!

let testArray = [[240,12, 10, 8,23],[240,12, 10, 8,24]];

function deleteItem(array) {
      if(array.length<=1){
            return array;
      }
      else{
            for(i=0; i<array.length-1;i++) {
                  let changed = true;
                  while(changed){
                        if(array[i]%array[i+1]!=0) {
                              array.splice(i+1,1);
                              i=0;
                              break;
                        }
                        else {changed=false};
                  }
            }
      }
      return array;
}

Если я только консольный журнал, он возвращает оба элемента, как ожидалось:

for(i=0;i<testArray.length;i++){
      console.log(  testArray[i]);
      //console.log(deleteItem(  testArray[i]));
}

returns:
[240, 12, 10, 8, 23]
[240, 12, 10, 8, 24]

Если я использую свою функцию, она вызывает только первый элемент массива

for(i=0;i<testArray.length;i++){
      console.log(  testArray[i]);
      console.log(deleteItem(  testArray[i]));
}
returns:
[240, 12, 10, 8, 23]
[240, 12]

I expect:
[240, 12, 10, 8, 23]
[240, 12]
[240, 12, 10, 8, 24]
[240, 12]

1 Ответ

0 голосов
/ 17 июня 2020

Не забудьте объявить свою переменную for-l oop с помощью «let». Он отлично работает, как только вы добавляете let. (То же самое внутри функции deleteItem)

for(let i=0;i<testArray.length;i++){
      console.log(  testArray[i]);
      console.log(deleteItem(  testArray[i]));
}

Нет проблем, когда вы просто l oop через свой testArray и выводите каждый элемент, но внутри вашей функции deleteItem () у вас есть еще один for-l oop с переменной с именем «i», которая не объявлена ​​локально.

Это означает: вы запускаете testArray l oop с глобальным i = 0. Затем вы вызываете функцию deleteItem, которая также использует тот же глобальный i для своего for-l oop. Таким образом, после выполнения функции deleteItem глобальный i устанавливается в 4, и исходное условие for-l oop больше не выполняется. Вот почему функция deleteItem не вызывается для вашего второго элемента testArray.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...