Помогите: В поисках элемента

Вероятно, я не самый одарённый человек, потому в упор не понимаю, как закончить это испытание.

Кажется, у меня получилось найти нужный элемент в массиве( не самая сложная часть, да?); но как дальше объясниться языком кода, что мне нужно найти индекс найденного элемента в массиве, да ещё и не какого-либо, а именно последнего - для меня загадка.

Заранее благодарю за помощь.

Summary
for ( var i =0; i <= numbers.length-1; i++){
  if (numbers[i]===number){
    console.log (numbers[i]);// проверяю, нашёл ли хоть элемент верно
     }
}

Можно намекнуть на индекс при помощи счетчика. Таким образом, lastIndex будет обновляться при каждом выполнении условия, и последнее значение и есть ответ)

3 лайка
var numbers = [2, 4, 7, 4, 7, 2];
var number = 4;
var lastIndex= -1;

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

Получилось как-то так, при проверке вроде работает.

8 лайков

Тут смысл в том, что мы берем элемент с конца и сравниваем его с number, как только мы находим этот элемент цикл прерывается и значение i остается равно lastIndex

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

7 лайков

Мой вариант, что можно улучшить?

P.s. методы, как выше не предлагать и так понятно…

В поисках элемента
console.log('Программа "В поисках элемента" by Nerealist');

var numbers = [2, 4, 7, 4, 7, 2];
var number = 4;
console.log('Ищем индекс числа ' + number + ' в массиве : ' + numbers);

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

if (!lastIndex) {
    lastIndex = -1;
}

console.log('Индекс искомого числа в массиве равен = ' + lastIndex);

Такой вариант:

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

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

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

А почему нельзя сделать просто вот так?

Сводка

var lastIndex = numbers.lastIndexOf(number);

3 лайка

Потому что учимся стоить алгоритмы и развивать логику, а не использовать встроенные методы js.

1 лайк
var numbers = [2, 4, 7, 4, 7, 2];
var number = 4;
var lastIndex = -1;

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

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

function callback(item) {
return item === number;
}

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

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

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

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

работает, а вариант

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

}

не работает ?

1 лайк

потому что если после искомого числа (в цикле) попадается другое (не целевое), то записывается -1, что не верно, т.к. нам важно сохранить предыдущий вариант

например вот так

else if (lastIndex === undefined) { lastIndex = -1; }

согласитесь, что первый вариант проще выходит =)

2 лайка


Здравствуйте!

Объясните плиз, почему не проходит третью проверку?

И в примерах выше я не вижу поиска именно последнего элемента. Тоже не поняла.

какой-то поток сознания, а не код.
объясните что означает lastMassive, зачем он нужен вообще?
почему нельзя на вывод сразу i выводить, вместо члена массива?
зачем затирать lastIndex на -1 каждый раз?
зачем в конце в lastIndex писать длину массива?

полностью на переделку, алгоритм какой-то очень мутный.
вас просят всего-лишь найти последнее вхождение, значит перебирать нужно с конца до первого совпадения, вот и всё (если не использовать продвинутые методы типа lastIndexOf)
либо же перебирать с начала и каждый раз переписывать lastIndex, последнее перезаписанное значение и есть искомое.

Доброе утро, LastMassive введен чтобы последний индекс четверки найти.
простой вывод i - выводит в консоль все индексы, а нам нужен последний, не так ли?

массивы полностью вывожу чтоб удобнее было смотреть как работает программа.

Может все проще, чем кажется, но все равно - почему третья проверка не проходит?

что не нравится программе в
}else{
lastIndex=-1;???

вы мое сообщение до конца прочитайте, вы изобретаете велосипед, там где не надо. вам нужен всего лишь последний i, на котором было совпадение. вам не нужно создавать новый массив. программе соответственно не нравится если искомого элемента вообще нет, но ваша программа возвращает длину массива, а она не -1, а 0.

Я так сделал.

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

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

if(lastIndex === undefined){
  lastIndex = -1;
}

console.log(lastIndex);
1 лайк

/let numbers = [2, 4, 7, 4, 7, 2];
let number = 4;
let lastIndex=numbers.lastIndexOf( number);
console.log(lastIndex);
/
самообучение рулит , гугл в помощь ,задача решается одной строчкой

Я решил вот так:

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

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