在数组中搜索,不仅是唯一值

时间:2017-02-20 11:20:53

标签: javascript arrays sorting

我有一个包含荷兰城市名称的简单数组:

var cities = ['Amsterdam', 'Den Haag', 'Den Helder', 'Rotterdam', 'Utrecht', 'Groningen', 'Zoetermeer', 'Zwolle', 'Delft'];

我搜索此数组的代码如下所示:

elems.searchField.on('keyup', function(e) {
    var index, city, result;
    var currentCity = elems.searchField.val().toLowerCase();
    for (index = 0; index < cities.length; ++index) {
        city = cities[index].toLowerCase();

        if (city.indexOf(currentCity) > -1) {
            result = city;
            console.log(result);
            break;
        }
    }
});

elems.optionsButton.on('click', function(e) {
    if (optionButtonState === 0) {
        elems.consoleItemSecondAndThird.css('display', 'flex');
        optionButtonState = 1;
    } else {
        elems.consoleItemSecondAndThird.hide();
        optionButtonState = 0;
    }
});

你可以看到两个以“Den”开头的城市,分别是“Den Haag”和“De Helder”。当我输入“Den”时,我需要看到它们都列出,但是,我的代码只查找唯一值,并且仅在插入“Den”时显示“Den Haag”。如何让它显示包含搜索查询的所有值?

4 个答案:

答案 0 :(得分:4)

您可以使用filter()来获取阵列,并使用 startsWith() 功能在过滤器内部。但请注意TypeError: fun() takes at least 2 arguments (1 given)在ES6中

<强> StartsWith

startsWith

要与旧版本的浏览器兼容,您可以使用var cities = ['Amsterdam', 'Den Haag', 'Den Helder', 'Rotterdam', 'Utrecht', 'Groningen', 'Zoetermeer', 'Zwolle', 'Delft']; console.log(cities.filter(item => item.startsWith('Den')));功能来比较indexOf()

index

答案 1 :(得分:0)

使用startsWith和filter;你也可以降低那里的值:

elems.searchField.on('keyup', function(e) {
    return cities.filter(v => v.toLowerCase().startsWith(this.value.toLowerCase())
}

答案 2 :(得分:0)

使用item.contain("Den")

所以它会给你任何物品,它会找到“den” 或者您可以使用item.startswith("Den")仅指定以“den”

开头的项目

答案 3 :(得分:0)

您也可以使用 RegExp

&#13;
&#13;
var cities = ['Amsterdam', 'Ajax', 'Den Haag', 'Den Helder', 'Denmark', 'Rotterdam', 'Utrecht', 'Groningen', 'Zoetermeer', 'Zwolle', 'Delft'];

function check(arr, query) {
  console.log(cities.filter(v => v.match(new RegExp('^' + query, 'g'))));
}

check(cities, 'Den');
check(cities, 'A');
&#13;
&#13;
&#13;