0
votes

Filtrer un tableau d'objets par un attribut tableau avec un autre tableau

Le code suivant ne renvoie pas les résultats attendus d'un tableau avec 1 élément. Peut-on peut-être vous éclairer à propos de la syntaxe correcte?

p>

let things = [{
    Name: 'Bill',
    Tags: ['tall', 'dude']
  },
  {
    Name: 'Ted',
    Tags: ['short', 'dude']
  }
];

let selectedTags = ['short', 'chick'];

let filtered = things.filter((thing => thing.Tags.indexOf(selectedTags) >= 0));
console.log(filtered);


3 commentaires

Vous souhaitez filtrer si des balises contiennent toutes ou toutes les pièces sélectionnées?


SELECTIONNE SELECTIONNE est un tableau aussi, mais votre fonction de filtre ne résout pas cela.


chose.tags.indexof (SELECTEDTAGS)> = 0 est identique à choses.tags.indexof ("court, poussin")> = 0


5 Réponses :


0
votes

Vous passez un tableau SelecteyTags code> à comprend code>. Vous devez vérifier la boucle via selecteyTags code> et vérifier si la balise est présente dans .tags code> de objet.

p>

let things = [{Name: 'Bill', Tags: ['tall','dude']},
              {Name: 'Ted', Tags: ['short','dude']}];
console.log(things);

let selectedTags = ['short','chick'];

let filtered = things.filter(x => {
  for(let tag of selectedTags){
    if(x.Tags.includes(tag)) return true;
  }
  return false;
});
console.log(filtered);


0 commentaires

0
votes

Tags sélectionnés code> est un tableau.

.indexof () code> attend une chaîne. p>

Vous pouvez obtenir la chaîne dans votre matrice par sélectionnée avec index, comme: p>

thing.Tags.indexOf(selectedTags[0])


0 commentaires

0
votes

Il semble donc que vous souhaitiez filtrer choses en fonction de l'un de l'un des chose.tags est dans SELECTTAGS .

Vous le feriez Faites quelque chose comme ça xxx

C'est, je pense que le moyen le plus expressif de l'écrire. Donne-moi toutes les choses où certaines des choses.tags sont incluses dans le tableau SelecteyTags.


0 commentaires

0
votes

Si vous devez filtrer les éléments qui ont une balise code> code> qui est présent sur le tableau code> sélectionné code>, vous pouvez aller avec ceci:

p>

.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}


0 commentaires

0
votes

Vous devez itérer sur chaque élément code> élément CODE> et analysez chaque élément de son Tags code> Array d'attributs:

p>

let things = [{
    Name: 'Bill',
    Tags: ['tall', 'dude']
  },
  {
    Name: 'Ted',
    Tags: ['short', 'dude']
  }
];

let selectedTags = ['short', 'chick'];
let filtered = things.filter(el => {
  //Use reduce on to get a count of how many matching tags
  return el.Tags.reduce((accum, tag) => {
    if (selectedTags.indexOf(tag) > -1) {
      accum += 1;
    }
    return accum;
  }, 0);
});

console.log(filtered);


0 commentaires