Мой вариант. Интересно посмотреть другие решения этой задачи.
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, 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 = [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, то вполне можно и так (ну исключая тот момент, что мы пока не в курсе об 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);
В условии цикла ошибка. Там должно быть i>=0.
Так как в противном случае нулевой индекс учитываться не будет.
Например мы имеем массив [12,14,17,2,15,2] и number = 12
В этом случае lastIndex будет -1, а должен быть 0.
Но тест проходит и так и так. Если бы тестов было больше, то вылезла бы ошибка
Код валится на втором тесте. В нём значение, которое нужно найти, стоит не на последнем месте. В конце цикла он сравнивает последнее значение в массиве с требуемым. Если значение не совпало, то в ответ идёт -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;
}
}
Почему такой вариант работает, а конкретно условие в 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);