J'essayais de rechercher la fonction. Cette fonction vérifie la matrice imbriquée, qui a plusieurs chaînes, puis renvoie si la matrice a un mot de recherche.
La structure de données du tableau P> J'ai essayé d'utiliser Indexof fonction. Mon résultat souhaité est la mise à jour des résultats de la recherche en temps réel. Merci beaucoup pour votre aide. P > p>
Cependant, je ne pouvais afficher aucun composant avec ce code ci-dessous.
Mais j'ai changé la valeur de la cible de item.Seecchwords strong> à item.name strong> dans le code. Cela a fonctionné. p>
Par exemple, avec la même structure de données ci-dessus, lorsque l'utilisateur recherche 'A', les mots de recherche 'AA' et 'AB' revient true pour afficher l'élément, P>
5 Réponses :
Vous devez faire boucler sur le tableau des mots de recherche pour trouver s'il correspond au mot de recherche.
Celui-ci fonctionnera
const filterItems = list.filter (
(Item) => item.seearchwords.filter ((MyWord) => MyWord.indexOf (Mots de recherche)> - 1)
); code> p>
Et si cela fonctionne, veuillez accepter ou uppote ^^, j'apprécierais ^^
Vous pouvez essayer avec . Démo: strong> p> p> trouver () code> et inclut () code> sur la propriété Nom de l'objet et enfin filtre () code>. <input id="searchWord"/>
Vous pouvez utiliser P> array # Réduire code> et filtrer seearchwords code> En utilisant le tableau code> Filtre # / code> en vérifiant les mots de recherche. const dataSource = [{
name: 'aa',
searchWords: ['aa', 'ab', 'bc']
},
{
name: 'bb',
searchWords: ['bb', 'bc', 'de']
}
],
searchWord = 'a',
result = dataSource.reduce((res, {name, searchWords}) => {
let matched = searchWords.filter(word => word.includes(searchWord));
if(matched.length) {
res.push({name, searchWords: matched});
}
return res;
},[])
console.log(result);
Merci pour votre solution. C'est excellent. Cependant, je voulais essayer de garder les choses soignées, je vais utiliser le filtre.
C'est parce que, comment Disons Syntaxe forte> de l'indexof est p> ici, dans votre cas p> et Lorsque vous effectuez: P> nom.indexof (" b "); //0 nom.indexof ("a"); // - 1 p> Il vérifiera si le P>
indexofofof code> strong> fonctionne, avec array code> et strings code>.
Name.indexof("bb "); // 0 p> SearchEntem code> existe n'importe où dans operateItem code>. P> let arr = ["aa", "ab", "a", "bb"];
console.log(arr.indexOf("a")); //2
console.log(arr.indexOf("aa")); //0
console.log(arr.indexOf("ab")); //1
console.log(arr.indexOf("b")); //-1
console.log(arr.indexOf("c")); //-1
console.log(arr.indexOf("aaa")); //-1
Le problème avec le code est qu'il tente de trouver si le tableau contient un mot lorsque vous utilisez indexof. EG: lorsque vous recherchez 'A', les chèques de code sont qu'il y a un mot 'A' dans la matrice et non un mot contenant la lettre 'A'.
Vous devez modifier la partie JS à: P>
JS P>
p>
<p id="result"> </>
Merci beaucoup. Celui-ci fonctionne aussi très bien. J'ai une question, comment va vérifier si la longueur est plus d'une?
Si le tableau des mots de recherche ne contient aucune chaîne qui inclut la marque de recherche, la fonction de filtre retourne une matrice vide. C'est pourquoi a vérifié la longueur.
Je pense que vous pouvez plus en plus réduire votre exemple à Pure JS depuis apparemment votre filtrage implique juste JS. Votre filtrage à moi est correct (sauf que vous devriez utiliser inclut l'index de l'index de (mais cela ne devrait pas changer votre problème). Pouvez-vous nous montrer quelle est la valeur de la prise de recherche? (Typiquement, si c'était
A code> item.name (avec Dites la première lettre) mais pas un mot deitem.Seecchwords code>)Veuillez partager la sortie attendue pour une entrée donnée.
@ user753643 Merci pour votre commentaire. Mots de recherche d'origine: ["Luke Skywalker"]. Les utilisateurs peuvent ajouter de nouveaux mots à ce tableau librement. Donc, le tableau pourrait être ["Luke Skywalker", "BOBAHEAD"]. Toute sorte de chaînes serait contenue.
@Hassanimam merci pour votre commentaire. L'entrée attendue est une chaîne.
Et si le caractère de recherche est
B code>?Vous voulez seulement tous les mots correspondants ou la matrice complète? En outre, lawnord de recherche doit être des mots de démarrage ou cela pourrait être n'importe où dans la chaîne.