2016-11-03 3 views
3

Я пытаюсь построить поиск предполагают, что возвращает лучший матч ниже мой код с комментариямиКак динамически проверять, содержит ли строка более одной подстроки?

/* 
    string = {"Canna Terra PLUS 50 Litres", "Canna Vega Tent", "Canna Bio Vega", "Super Canna 50 max" } 
    search = "Canna Vega" this can be dynamic ranging up to 4 words search term 

    The expected return array would be 

    {"Canna Vega Tent", "Canna Bio Vega" } 

    */ 

    function loadSuggest(string,search){ 

     if(search.length < 3){ 
      return; // suggest is loaded only if the search term is more than 3 letter 
     } 

     var terms = search.split(' '); // split the search term with spaces 
     var i; 

     for(i = 0; i < string.length; i++){ 

      /* 
      how to dynamically check and return 
      the results containing more than one term match ? 
      I have tried indexOf() but that fails with dynamic number of words matching 
      */ 

     } 
     return resultArray; 
    } 

я упомянул в комментариях кода, я стараюсь, чтобы получить лучший матч со строкой, содержащей все слова в поиске срок.

+0

"abcdefabcfjbjabc", который вы хотите что есть 3 совпадения «abc». Right – void

+0

@void no, например строка «abc bbc ccf efg», поисковый термин «abc ccf», я хочу знать, присутствуют ли как «abc», так и «ccf» в этой строке –

ответ

4

Попробуйте это - с помощью Array.prototype.every, чтобы проверить, если все поисковые слова есть и их фильтрации с помощью Array.prototype.filter

Demo ниже:

var string = ["Canna Terra PLUS 50 Litres", "Canna Vega Tent","Canna Bio Vega", "Super Canna 50 max"]; 
 

 
function loadSuggest(string, search) { 
 
    var terms = search.split(' '); 
 
    return string.filter(function(element) { 
 
    return terms.every(function(e) { 
 
     return element.toLowerCase().indexOf(e.toLowerCase()) !== -1; 
 
    }); 
 
    }); 
 
} 
 

 
console.log(loadSuggest(string, "Canna vega"));

+0

@ClainDsilva сообщите мне, если это работает ты? – kukkuz

+1

Это был отличный ответ, он отлично поработал, я с благодарностью принял ваш ответ. –

Смежные вопросы