Задать вопрос
@winers
Начинающий программист

Как сравнить число с значением в массиве и вывести его индекс без indexOf()?

есть вот такая задача
// Напишите функцию f12, которая эмулирует работу метода indexOf - ищет введенное число в массиве d12 (перебором). Если числа нет - выводит -1, если есть - его позицию в массиве.

let d12 = [6, 62, 60, 70, 1, 33];

function f12() {
    const divOut = document.querySelector('.out-12');
    let inputVal = +document.querySelector('.i-12').value;
    let out = '';
    for (let i = 0; i < d12.length; i++) {
        if (d12[i] === inputVal) {
            out = [i];
        } else {
            out = -1;
        }
    }
    divOut.innerHTML = out;
}

document.querySelector('.b-12').onclick = f12;


почему работает только с последним элементом в массиве?
  • Вопрос задан
  • 1614 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Потому что вы всегда проходите весь массив и после выхода из цикла в out у вас результат сравнения с последним элементом массива.
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
@IrinaPronina
let d12 = [6, 62, 60, 70, 1, 5];

function f12() {
    let out = '';
    let input = +document.querySelector('.i-12').value;
    for (i = 0; i < d12.length; i++) {
        if (d12[i] === input) {
            out = [i];
            break
        } else {
            out = -1;
        }
    }

    document.querySelector('.out-12').innerHTML = out;
}

document.querySelector('.b-12').onclick = f12;
Ответ написан
Комментировать
sergiks
@sergiks Куратор тега JavaScript
♬♬
Разделите отображение результата от поиска: пусть функция f12() только ищет и возвращает позицию (или –1).

Алгоритм: перебирать элементы, и как только нашёлся, всё – возвращать позицию, функция закончила работу.
spoiler
let d12 = [6, 62, 60, 70, 1, 33];

function f12(arr, search) {
  for (let i = 0; i < arr.length; i++) {
    if (arr[i] === search) {
      return i;
    }
  }
  return -1;
}

function show() {
  const divOut = document.querySelector('.out-12');
  const inpuValue = +document.querySelector('.i-12').value;

  divOut.innerHTML = f12(d12, inpuValue);
}

document.querySelector('.b-12').onclick = show;
Ответ написан
Комментировать
webdisigner
@webdisigner
indexOf показывает первое совпадение а у вас в коде я не вижу "прерывания"
Ответ написан
@stavbers
Попалась эта задачка, видимо один курс проходим). У меня так заработало
let d12 = [6, 62, 60, 70, 1, 5];
function f12() {
    let inp = document.querySelector('.i-12').value;
    let out12 = document.querySelector('.out-12');
    inp = parseInt(inp);
    for(let i = 0; i < d12.length; i++){
       if(inp == d12[i]){
        out12.innerHTML = i;
        return false
       } 
    }
    for(let i = 0; i < d12.length; i++){
        if(inp !== d12[i]){
         out12.innerHTML = '-1'
         return false
        } 
     }
}
document.querySelector('.b-12').onclick = f12;
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы