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);
5 Réponses :
Vous passez un tableau p> 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.
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);
Vous pouvez obtenir la chaîne dans votre matrice par sélectionnée avec index, comme: p> Tags sélectionnés code> est un tableau.
.indexof () code> attend une chaîne. p>
thing.Tags.indexOf(selectedTags[0])
Il semble donc que vous souhaitiez filtrer Vous le feriez Faites quelque chose comme ça p> 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. P> p> choses code> en fonction de l'un de l'un des
chose.tags code> est dans
SELECTTAGS code>.
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;}
Vous devez itérer sur chaque élément code> élément CODE> et analysez chaque élément de son p> Tags code> Array d'attributs:
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);
Vous souhaitez filtrer si des balises contiennent toutes ou toutes les pièces sélectionnées?
SELECTIONNE SELECTIONNE CODE> est un tableau aussi, mais votre fonction de filtre ne résout pas cela.
chose.tags.indexof (SELECTEDTAGS)> = 0 code> est identique à
choses.tags.indexof ("court, poussin")> = 0 code>