Простой Javascript для l oop останавливается после первой итерации - PullRequest
0 голосов
/ 05 августа 2020

Я прочитал кучу других сообщений, в которых были похожие проблемы, и до сих пор не могу понять, почему это странно. Я попытался выполнить команду try / catch, и ошибок не было. Массивов на самом деле более 100, но для примера они сужаются. Он работает при поиске первого элемента в массиве, но все после этого не работает после одной попытки итерации. Я распечатал длину массива и увидел, что длина массива превышает 100.

Изменить: я должен отметить, что это единственное место, где используется var k.

function main(){
  var list = [["feature 123", 5.0], ["feature 234", 38.0], ["feature 345", 38.0]];
  var search = "feature 234";
  var a = getIndexx(list, search);
}

function getIndexx(array, str) {
   for(var k=0; k < array.length; k++) {
     if(array[k][0] === str) {
       return k;
     } else {
       return -1
     }
  }
}

Ответы [ 2 ]

1 голос
/ 05 августа 2020

You return -1 внутри for l oop, что означает, что если он найдет совпадение по первому индексу, он вернет 0, иначе он немедленно вернет -1. Вы хотите переместить return -1 так, чтобы он был после l oop, поэтому, если он не находит совпадений, он возвращает -1.

0 голосов
/ 05 августа 2020

Вам не нужно условие else. Вы хотите вернуть найденный индекс только в том случае, если условие является допустимым.

Если вы не нашли подходящего значения во время цикла, вы вернете -1.

function main() {
  var list = [
    ["feature 123", 5.0],
    ["feature 234", 38.0],
    ["feature 345", 38.0]
  ];
  var search = "feature 234";
  var a = getIndexx(list, search);
  console.log(a); // 1
}

function getIndexx(array, str) {
  for (var k = 0; k < array.length; k++) {
    if (array[k][0] === str) {
      return k;
    }
  }
  return -1; // Should be the default condition
}

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