Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 26.02.2018, 17:26
Аспирант
Отправить личное сообщение для TheSanches Посмотреть профиль Найти все сообщения от TheSanches
 
Регистрация: 21.01.2018
Сообщений: 78

Перебор элементов массива и сравнение со значением
Доброго времени суток, есть небольшая функция которая должна искать совпадение с введенным значением в input и элементами массива, если совпадение есть должна появиться надпись true, если нет false.

Но true выводится только если в input введено (пять) - то-есть последнее значение массива,

если же ввести (два) или (три) выводит false.

Вопрос, почему так происходит, если значение (три) есть в массиве, и как сделать чтобы функция работала корректно?
function myFunc(){
	let arr = ['один', 'два', 'три', 'четыре', 'пять'];
	let input = document.getElementById('input').value; //получаем значение введенное в input	
	let out = document.getElementById('out');
	
	for(let i = 0; i < arr.length; i++){
		if(arr[i] == input){
			out.innerHTML = 'true';
		}
		else{
			out.innerHTML = 'false';
		}
	}
}
document.getElementById('enter').onclick = myFunc;



<input type="text" id="input">
<button id="enter">Click</button>
<p id="out"></p>
Ответить с цитированием
  #2 (permalink)  
Старый 26.02.2018, 17:39
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

TheSanches,
одно из множества решений,
в цикле вам нужно получить значение, а после цикла его установить
Ответить с цитированием
  #3 (permalink)  
Старый 26.02.2018, 17:43
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,728

После того как вы нашли совпадение, нужно останавливать цикл.
Вы можете отказаться от перебора массива и воспользоваться методом "indexOf":
document.getElementById('enter').onclick=function(){
	document.getElementById('out').innerHTMl=
		['один', 'два', 'три', 'четыре', 'пять'].indexOf(
			document.getElementById('input').value.toLowerCase()
		)>-1;
};

https://developer.mozilla.org/ru/doc.../Array/indexOf
Ответить с цитированием
  #4 (permalink)  
Старый 26.02.2018, 17:49
Аспирант
Отправить личное сообщение для TheSanches Посмотреть профиль Найти все сообщения от TheSanches
 
Регистрация: 21.01.2018
Сообщений: 78

Спасибо
Ответить с цитированием
  #5 (permalink)  
Старый 26.02.2018, 17:52
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

TheSanches,
<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">

  <script>
  "use strict"
window.addEventListener('DOMContentLoaded', function() {
function myFunc(){
  let arr = ['один', 'два', 'три', 'четыре', 'пять'];
  let input = document.getElementById('input').value; //получаем значение введенное в input
  let out = document.getElementById('out');
  let assessment = false;
  for(let i = 0; i < arr.length; i++){
    if(arr[i] == input){
      assessment = true; break;
    }
  }
  out.innerHTML = assessment
}

document.getElementById('enter').addEventListener('click', myFunc);

    });
  </script>
</head>

<body>

<input type="text" id="input" value="три">
<button id="enter">Click</button>
<p id="out"></p>


</body>
</html>
Ответить с цитированием
  #6 (permalink)  
Старый 26.02.2018, 18:35
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

Можно и не останавливать - полная проверка. В массиве могут быть повторы
<!DOCTYPE html>
<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">

  <script>
  "use strict"
window.addEventListener('DOMContentLoaded', function() {
function myFunc(){
  let arr = ['один', 'два', 'три', 'четыре', 'пять'];
  let input = document.getElementById('input').value; //получаем значение введенное в input
  let out = document.getElementById('out');
  let assessment = '';
  for(let i = 0; i < arr.length; i++){
     assessment +=  arr[i] + ':' + (arr[i] == input) + '<br>';
  }
  out.innerHTML = assessment
}

document.getElementById('enter').addEventListener('click', myFunc);

    });
  </script>
</head>

<body>

<input type="text" id="input" value="три">
<button id="enter">Click</button>
<p id="out"></p>


</body>
</html>
Ответить с цитированием
  #7 (permalink)  
Старый 26.02.2018, 19:24
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

рони,
for(let i = 0; i < arr.length; i++){
  	if(arr[i] == input){
  		assessment = true; break;
  	}
  }

вместо этого куска так и напрашивается .some()
Ответить с цитированием
  #8 (permalink)  
Старый 26.02.2018, 19:54
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

Сообщение от j0hnik
вместо этого куска так и напрашивается .some()
можно но for быстрее
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Добавить К элементов в конец массива allonemoon Серверные языки и технологии 2 26.05.2017 15:10
Сравнение элементов массива nikola_blin Events/DOM/Window 5 22.05.2015 10:25
Массив из элементов другого массива, взятых в случайном порядке Basil_JS Общие вопросы Javascript 6 12.04.2015 13:07
Сравнение элементов массива по столбцам и диагоналям ghost200607 Общие вопросы Javascript 41 26.08.2014 14:52
Определить количество отрицательных элементов массива Тип_1 Общие вопросы Javascript 3 25.06.2012 18:24