Maison > Questions et réponses > le corps du texte
L'assistance au contenu vous fournit une liste de complétions suggérées pour les chaînes partiellement saisies.
L'assistance au contenu vous fournit une liste de complétions suggérées pour les chaînes partiellement saisies.
La description est à peu près comme ci-dessus, je ne sais pas comment utiliser un mot plus précis pour la décrire.
sublime, vous saisissez des "caractères incomplets" et elle vous renverra tous les résultats contenant ces lettres. Par exemple : saisissez ds pour obtenir desk , même s'il y a une lettre e au milieu.
Je veux juste savoir comment cela se réalise et quel est le principe ?
De plus, cette fonction a-t-elle un nom (en fait, je ne sais pas comment cette fonction devrait s'appeler, donc cela gêne ma recherche de réponses en ligne) ?
迷茫2017-07-03 11:44:19
@boxsnake a donné un exemple de recherche dans un tableau. Les résultats renvoyés doivent être triés "avsdsss" a la priorité la plus élevée, car il contient des "ds" consécutifs. "Tout le monde" devrait également être coché, il contient "d".
La complexité temporelle de la recherche dans le tableau est trop élevée Lorsqu'il y a de nombreux mots-clés, la vitesse est fondamentalement inacceptable.
La méthode efficace et réalisable consiste à utiliser un arbre de recherche de chaînes.
Trie Tree (arbre de dictionnaire) pour le traitement massif de données
女神的闺蜜爱上我2017-07-03 11:44:19
Cette fonction devrait s'appeler « Search Smart Tips »
Il existe de nombreuses façons de l'implémenter, mais je ne connais que la plus simple et la plus facile à comprendre. L'algorithme de requête complexe est optimisé, ce qui est plus efficace et peut impliquer des problèmes de programmation dynamique.
Si c'est la méthode la plus simple, elle consiste à diviser la chaîne, puis à mettre un .*
entre tous les deux caractères, puis à générer une expression régulière et à utiliser cette expression régulière pour faire correspondre la liste
Pseudo-code JS :
var list = [ ... ];
var text = 'ds';
var result = [];
if(text != '') {
var pattern = new RegExp(text.split('').join('.*'));
result = list.filter(function(item) {
return pattern.test(item);
});
}
Effet de démonstration :