2016-10-26 1 views
0

Je suis coincé en essayant de filtrer un tableau en utilisant la méthode Array.filter.String indexOf always return -1

S'il vous plaît jeter un coup d'oeil dans mon code:

$scope.products = CachedData.Products.filter(function (item) { 
    var itemNameSlug = Helpers.slug(item.Name); // eg: product100 
    var keywordSlug = Helpers.slug($scope.keyword); // eg: p, pr, pro, duct etc... 
    var result = itemNameSlug.indexOf(keywordSlug); 
    console.log(result); // always -1 
    return result > -1; 
}); 

Lorsque je tape comme mot-clé alphabet, il retourne toujours tableau vide (ce retour indexOf -1). Si je tape numérique, l'exemple est 1 ou 10 ou 100 ou 00, j'ai obtenu le résultat correct.

Pourquoi?

Toute aide sera appréciée. Merci

+1

quel est le résultat de console.log ($ scope.keyword, Helpers.slug ($ scope.keyword))? –

+0

Les deux sont des chaînes. S'il vous plaît voir le commentaire dans mon code – trinvh

+0

clairement, ils ne sont pas les deux chaînes, sinon le résultat ne serait pas toujours -1 –

Répondre

0

@trinvh selon la sortie de votre commentaire, vous avez un espace de fuite se au milieu lors de la recherche de la aiguille dans la botte de foin, si l'aiguille obtient un espace de fin, il serait impossible de faire correspondre (puisque nous traitons ici avec les limaces, qui ne contiennent pas d'espaces)

/* according to your comment: */ 
console.log('-' + itemNameSlug + '-', '-' + keywordSlug + '-', typeof itemNameSlug, typeof keywordSlug); 
/* gives: -product95 - -pro - string string */ 

alors je dirais que l'aiguilleest « pro », qui ne correspondront « product95 "