Shadow_Princess
@Shadow_Princess

Не могу понять простой js. Пните в нужном направлении?

Доброго времени суток!

Заранее прошу прощения за нубский вопрос, однако он имеет место быть. Начала изучать js - вот пытаюсь решить задачку. А сообразительности почему-то не хватает (или знаний маловато)... Прошу помощи.

Задача такая:
У нас есть массив с английскими словами (для примера - 7 штук - а может быть и 100), просим пользователя ввести букву, по соответствию которой выводим имеющееся в нашем массиве слова. Если нет - пишем что такое не найдено.

Как осуществить поиск буквы в элементе массива? Надо же как-то обратиться к элементу.

var libraryLetter = ["book", "car", "bank", "near", "between", "map", "dog"];
        var userLetter = prompt("Укажите буквы через запятую");

        for (var i = 0; i < libraryLetter.length; i++) {            
            if(libraryLetter.indexOf(userLetter) == true){
                    ????
               }else {
                       console.log("Совпадений не найдено");
                        }
        };


P.s. И вот чувствую, что где-то туплю, но где...? Как-то с логикой не совсем получается.
  • Вопрос задан
  • 393 просмотра
Решения вопроса 2
@lemme
Frontend
https://developer.mozilla.org/ru/docs/Web/JavaScri...
function inArray(arr, str) {
	return arr.filter(function(item) {
  	return item.indexOf(str) !== -1
  })
}

var words = inArray(libraryLetter, 'a')

if (words.length > 0 ) {
	console.log(words)
} else {
	console.log('Совпадений не найдено')
}
Ответ написан
Комментировать
@MrTimon
Во-первых indexOf возвращает число - позицию первого вхождение (тоесть может быть и 0 если первый элемент) или -1 ели ничего не найдет, тоесть неверно его результат сравнивать с true. Во-вторых вы верно говорите что нужно обратиться к элементу массива, а вы ищете во всем массиве. Ну и еще вы вводите буквы через запятую то здесь не понятно как должно быть вывести все слова в которых есть хотя бы одна из введенный букв или слова в которых должны быть все введенные буквы. Если считать что вводиться только одна буква и переделать ваш пример то получается что-то такое

var libraryLetter = ["book", "car", "bank", "near", "between", "map", "dog"];
        var userLetter = prompt("Укажите букву");

        for (var i = 0; i < libraryLetter.length; i++) {            
            if(libraryLetter[i].indexOf(userLetter) > -1){
                    ????
               }else {
                       console.log("Совпадений не найдено");
                        }
        };


Можно так же заюзать filter ф-цию . Получиться так

var libraryLetter = ["book", "car", "bank", "near", "between", "map", "dog"];
        var userLetter = prompt("Укажите букву");

        var filteredwords =  libraryLetter.filter(function(value) {
                  return value.indexOf(userLetter) > -1
        }) 
      
            if(filteredwords.length ){
                    ????
               }else {
                       console.log("Совпадений не найдено");
              };
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@Interface
Попробуйте так
libraryLetter.filter(word => word.indexOf('a') !== -1)
Ответ написан
Комментировать
var libraryLetter = ["book", "car", "bank", "near", "between", "map", "dog"];
        var userLetter = prompt("Укажите букву");

        for (var i = 0; i < libraryLetter.length; i++) {            
            if(libraryLetter[i].indexOf(userLetter) == 0){
                    console.log("Совпадение " + libraryLetter[i]);
               }else {
                       console.log("Совпадений не найдено");
                        }
        };

(libraryLetter[i].indexOf(userLetter) == 0)
Это индекс найденного совпадения, если индекс равен 0 то это значит что libraryLetter[i] начинается с userLetter
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы