使用切片函数将输入与数组比较时出现问题

时间:2019-05-18 13:01:51

标签: javascript arrays substring slice

我正在创建一个搜索栏,该搜索栏将过滤一个具有法国城市名称的数组,该城市名称与每个键输入的输入值相匹配。我正在返回一些结果(使用控制台日志),但是结果不是我所期望的,并且我正在使用的IF条件似乎无法正常工作...

基于JavaScript和一些jQuery从文本文件中获取城市列表,我尝试使用indexOfmatch函数,但似乎使用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;
            }
        }
    }
});

因此,我希望在控制台日志中看到与输入匹配的城市。但是,此功能在此之前似乎已失效,因为即使我知道我已经输入了列表中的城市,resultmatchedCities变量似乎也没有改变。

1 个答案:

答案 0 :(得分:0)

您可以使用Array.filterArray.includes进行搜索。像这样:

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

您可以添加所需的其余代码,但想法是以这种方式“搜索”。