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

Мой вариант. Интересно посмотреть другие решения этой задачи.
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);

7 лайков
var numbers = [2, 4, 7, 4, 7, 2];
var number = 4;

var lastIndex = numbers.lastIndexOf(number);
6 лайков

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;
  }
}
3 лайка

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);
2 лайка

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
}
}

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

4 лайка

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

let numbers = [2, 4, 7, 4, 7, 2];
let number = 4;
let lastIndex;

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

Почему такой вариант не работает?

1 лайк

Код валится на втором тесте. В нём значение, которое нужно найти, стоит не на последнем месте. В конце цикла он сравнивает последнее значение в массиве с требуемым. Если значение не совпало, то в ответ идёт -1.
Можно с самого начала lastIndex-у задать значение -1, и запустить цикл. В таком случае, если в массиве найдётся нужное значение, то запишется нужный индекс, а если не найдётся - то получим искомую -1.

Сводка

let numbers = [0,17,0,0,15,2,2];
let number = 0;
let lastIndex = -1;

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

1 лайк

let numbers = [2, 4, 7, 4, 7, 2];
let number = 4;
let lastIndex = 0;

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

Зашла сзади))

3 лайка

//можно выбрать любой вариант

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

//вариант 1
for (let i = 0; i < numbers.length; i++) {
if (numbers[i] === number) {
lastIndex = i;
console.log(lastIndex)
}
}

//вариант 2
let numbers = [2, 4, 7, 4, 7, 2];
let number = 4;
let lastIndex = numbers.lastIndexOf(number);

Почему такой вариант работает, а конкретно условие в else вторая его часть с i === lastIndex
От балды его вписал и заработало, но почему

let numbers = [2, 4, 7, 4, 7, 2];
let number = 4;
let lastIndex = 0;
for (let i = 0; i < numbers.length; i++) {
   if (numbers[i] === number && i >= lastIndex) {
     lastIndex = i;
  } else if (number !== numbers[i] && i === lastIndex) {
     lastIndex = -1;
    }
}
console.log('Итог: ' + lastIndex);
1 лайк

Не вижу смысла прописывать ветку else if, если значение -1 можно записать явно в начале, а после его перезадать внутри цикла.

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

for(let i = 0; i < numbers.length; i++) {
  if(numbers[i] === number){
      lastIndex = i;
  }
}
3 лайка
let lastIndex;

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