Проблема сравнения входных данных с массивом с помощью функции слайса - PullRequest
0 голосов
/ 18 мая 2019

Я создаю панель поиска, которая фильтрует массив с французскими названиями городов, которые соответствуют входному значению каждого ключа.Я получаю некоторые результаты обратно (используя журнал консоли), но результаты не соответствуют ожиданиям, и условие IF, которое я использую, похоже, не работает ...

Основано на JavaScript и немногоjQuery, чтобы получить мой список городов из текстового файла, я пытался использовать функции indexOf и match, но использование slice(), кажется, дало мне больше всего.Я что-то упускаю, чтобы вставить совпадающие результаты в новую переменную / массив.

var cityArray = [];
$.get("liste.txt", function (data) {
    cityArray = data.split("\n").sort();
    console.log(cityArray);
});

$("#myInput").keyup(function () {
    var searchedWord = $(this).val();
    var counter = searchedWord.length;
    var result = [];
    console.log(searchedWord);
    // console.log(typeof searchedWord);
    // console.log(counter);
    var matchedCities = 0;
    if (counter < 3) {
        return;
    }
    for (var i = 0; i < 100; i++) {
        var city = cityArray.slice(0, cityArray.length);

        console.log(city[i].slice(0, searchedWord.length));
        if (city[i].slice(0, searchedWord.length) == searchedWord) {
            result.push(city[i]);
            console.log(result);
            matchedCities++;
            console.log(matchedCities);
            if (matchedCities > 5) {
                break;
            }
        }
    }
});

Поэтому я ожидаю увидеть совпадающие города с вводом в журнале консоли.НО, кажется, функция до этого ломалась, поскольку переменные result и matchedCities, похоже, не меняются, даже когда я знаю, что набрал город, который находится в списке.

1 Ответ

0 голосов
/ 18 мая 2019

Вы можете использовать Array.filter и Array.includes для поиска. Как то так:

$("#myInput").keyup(function () {
  var searchedWord = $(this).val();
  var result = cityArray.filter(c => c.toLowerCase().includes(searchedWord.toLowerCase()))
  console.log(result)
});

Вы можете добавить остальную часть кода, который вам нужен, но идея состоит в том, чтобы «искать» таким образом.

...