2017-02-20 49 views
0

我有一個包含一個簡單的數組荷蘭城市名稱:搜索的數組,而不是唯一的值

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

你得到結果只有一個,因爲你的變量「結果」產生只有一個城市。您可以改爲將其用作數組並繼續for循環。 like'result.push(city);繼續;' – getjackx

回答

4

您可以使用filter()來獲取數組,並在過濾器內部使用startsWith()函數。但要注意,startsWith是ES6

StartsWith

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

 
console.log(cities.filter(item => item.startsWith('Den')));

爲了與舊版本的瀏覽器可以使用indexOf()功能比較index兼容。

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

 
console.log(cities.filter(item => item.indexOf('Den') === 0));

0

使用startsWith和過濾器;你可以在那裏太小寫值:

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

使用item.contain("Den")

所以它會給你將在其中找到「巢穴」 任何項目,也可以使用item.startswith("Den")指定只有那些啓動項與「書房」

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');

+0

@erol_smsr考慮upvoting? (: –