2017-02-20 7 views
0

Ich habe eine einfache Array mit niederländischen Namen:Suchen im Array, nicht nur eindeutige Werte

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

Mein Code durch dieses Array suchen wie folgt aussieht:

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

Sie zwei sehen können Städte, die mit "Den" beginnen, das sind "Den Haag" und "De Helder". Wenn ich "Den" eintippe, muss ich beide aufgelistet sehen, aber mein Code sucht nur nach eindeutigen Werten und zeigt nur "Den Haag", wenn beispielsweise "Den" eingefügt wird. Wie kann ich alle Werte anzeigen lassen, die die Suchanfrage enthalten?

+0

Sie erhalten nur ein Ergebnis, weil Ihre Variable 'result' nur eine Stadt ergibt. Sie können es stattdessen als Array verwenden und die for-Schleife fortsetzen. wie 'result.push (Stadt); fortfahren; ' – getjackx

Antwort

4

Sie können filter() verwenden, um das Array zu erhalten und innerhalb des Filters startsWith() Funktion zu verwenden. Aber beachten Sie, dass startsWith in ES6 ist

Starts

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

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

Um mit alten Versionen von Browsern kompatibel zu sein, das Sie indexOf() Funktion index vergleichen können.

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

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

0

Verwendung starts und Filter;

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

Verwendung item.contain("Den")

so wird es geben Sie ein beliebiges Element, in dem er feststellt, oder Sie können item.startswith("Den") nur die die Elemente festlegen, „den“ beginnt: Sie können die Werte in dort zu klein geschrieben mit "den"

0

Sie können es auch mit RegExp tun.

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 Betrachten Sie das Upvoting? (: –

Verwandte Themen