Испытание. В поисках элемента

Мой вариант. Интересно посмотреть другие решения этой задачи.
var numbers =  [12,14,17,4,15,2];
var number = 11;
var lastIndex;

for (var i=0; i<numbers.length; i++) { 
  if (numbers[i]===number) { 
    var index=i;
    lastIndex= index;   
} else if (!index) {   
    lastIndex= -1;
}
}
var numbers = [2, 4, 7, 5, 4, 4];

var number = 4;
var lastIndex = -1;
for (i = 0; i< numbers.length; i++){
if(numbers[i] === number){
lastIndex = i;
}
}
console.log(lastIndex);

5 Симпатий
var numbers = [2, 4, 7, 4, 7, 2];
var number = 4;

var lastIndex = numbers.lastIndexOf(number);
3 Симпатий

for (var i=numbers.length-1; i>0; i–) {
if (number == numbers[i]) {
lastIndex = i;
break;
} else {
lastIndex = -1;
}
}

var numbers = [2, 4, 7, 4, 7, 2];
var number = 4;
var lastIndex = -1;

for (var i = numbers.length - 1; i >= 0; i--) {
  if (numbers[i] === number) {
    lastIndex = i;
    break;
  }
}
2 Симпатий

var numbers = [2, 4, 7, 4, 7, 2];
var number = 4;
var lastIndex = -1;

for (i = 0; i < numbers.length; i++){

if (number == numbers[i]){
lastIndex = i;
}
};

Кто-нибудь знает, почему этот вариант работает:

            var numbers = [12,14,17,2,15,2];
            var number = 20;
            var lastIndex;
            for (var i = 0; i <= numbers.length - 1; i++) {
              if (numbers[i] == number) {
                var one = numbers[i];
                numbers[0] = one;
                if (numbers[0] == number) {
                  lastIndex = i;
                } 
              } if (numbers[0] != number) {
                  lastIndex = -1;
                }
            }

А этот нет:

        var numbers = [12,14,17,2,15,2];
        var number = 20;
        var lastIndex;
        for (var i = 0; i <= numbers.length - 1; i++) {
          if (numbers[i] == number) {
            var one = numbers[i];
            numbers[0] = one;
            if (numbers[0] == number) {
              lastIndex = i;
            } else {
              lastIndex = -1;
            }
          } 
        }

Они же одинаковые.

чет вы лютую дичь написали, что в первом, что во втором случае.

второй не работает, потому что не возвращает -1, при отсутствии совпадения.

 numbers[0] = one;

а зачем вы меняете исходный массив? вы должны сравнивать numbers[i] c числом из ТЗ, а в случае совпадения записать в отдельную переменную индекс. а если нет совпадения либо дефолтно прописать индекс -1, либо записать через условие -1.
Изменять исходные данные ни в коем случае нельзя (если только вы это не делаете в составе копии внутри функции, но эт еще рано вам знать).

Я в тот момент не додумался дефолтно вписать
lastIndex = -1
Поэтому меня разнесло.

Если дефолтно не писать lastIndex = -1, то вполне можно и так (ну исключая тот момент, что мы пока не в курсе об lastIndexOf()):

var numbers =  [12, 14, 17, 4, 15, 2];
var number = 4;

var lastIndex;

for (var i = 0; i < numbers.length; i++) {
 if (number === numbers[i]) {
   lastIndex = i;
} else if (!i) {
   lastIndex= -1;
 }
}

console.log(lastIndex);
1 Симпатия

var numbers = [2, 4, 7, 4, 7, 2];
var number = 4;
var lastIndex = -1;
var maxNumber = numbers.length - 1;
for (var i = maxNumber; i >= 0; i–) {
if (number === numbers[i]){
console.log(numbers[i]);
lastIndex = i;
break
}else{
lastIndex = -1
}
}

Я наверное очень сильно туплю, но как во всех этих решениях получается так, что выводится именно последний индекс? Какое условие отвечает за это?

2 Симпатий

В условии цикла ошибка. Там должно быть i>=0.
Так как в противном случае нулевой индекс учитываться не будет.
Например мы имеем массив [12,14,17,2,15,2] и number = 12
В этом случае lastIndex будет -1, а должен быть 0.
Но тест проходит и так и так. Если бы тестов было больше, то вылезла бы ошибка :wink: