0
votes

Comment filtrer des chaînes dans la matrice?

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 xxx

J'ai essayé d'utiliser Indexof fonction.
Cependant, je ne pouvais afficher aucun composant avec ce code ci-dessous.
Mais j'ai changé la valeur de la cible de item.Seecchwords à item.name dans le code. Cela a fonctionné. xxx

Mon résultat souhaité est la mise à jour des résultats de la recherche en temps réel.
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,

Merci beaucoup pour votre aide.


6 commentaires

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 item.name (avec Dites la première lettre) mais pas un mot de item.Seecchwords )


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 ?


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.


5 Réponses :


1
votes

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


1 commentaires

Et si cela fonctionne, veuillez accepter ou uppote ^^, j'apprécierais ^^



1
votes

Vous pouvez essayer avec trouver () code> et inclut () code> sur la propriété Nom de l'objet et enfin filtre () code>.

. Démo: strong> p>

p>

<input id="searchWord"/>


0 commentaires

0
votes

Vous pouvez utiliser array # Réduire code> et filtrer seearchwords code> En utilisant le tableau code> Filtre # / code> en vérifiant les mots de recherche.

P>

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


1 commentaires

Merci pour votre solution. C'est excellent. Cependant, je voulais essayer de garder les choses soignées, je vais utiliser le filtre.



0
votes

C'est parce que, comment indexofofof code> strong> fonctionne, avec array code> et strings code>.

Disons Syntaxe forte> de l'indexof est p> xxx pré>

ici, dans votre cas p> xxx pré>

Une chaîne forte>, p>

et Searchwords est un tableau fort>. p>

Lorsque vous effectuez: P>

nom.indexof (" b "); //0


Name.indexof("bb "); // 0 p>

nom.indexof ("a"); // - 1 p>

Il vérifiera si le SearchEntem code> existe n'importe où dans operateItem code>. P>

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


0 commentaires

0
votes

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">
  </>


2 commentaires

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.