我有一个包含荷兰城市名称的简单数组:
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”。如何让它显示包含搜索查询的所有值?
答案 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
。
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;