Voici ma carte:
var validate = data.map(obj => obj.category)); if(validate){ return (data.map(obj => `<div style="border-color:${obj.category.color}" class="circle"></div> ${obj.name}`)).join('<br>'); } else { return (data.map(obj => `${obj.name}`)).join('<br>'); }
Cela fonctionne bien, mais dans certains cas, obj.category
ne se ferme pas. S'il n'existe pas, je veux retourner uniquement:
return (data.map(obj => `${obj.name}`)).join('<br>');
J'ai essayé
return (data.map(obj => `<div style="border-color:${obj.category.color}" class="circle"></div> ${obj.name}`)).join('<br>');
Le problème est que je ne suis pas en mesure pour créer la variable validate
car j'obtiens une erreur de console lorsque je charge la page:
TypeError: obj.category n'est pas défini
Je ne suis pas en mesure de faire la validation, si elle est définie
5 Réponses :
Simplement dans le modèle littéral, vous pouvez vérifier si obj.category
s'il existe en passant le cercle
sinon, passez simplement chaîne vide
changez ceci
return (data.map(obj => `${obj.category ? <div style="border-color:${obj.category.color}" class="circle"></div> : ''} ${obj.name}`)).join('<br>');
en ceci
return (data.map(obj => `<div style="border-color:${obj.category.color}" class="circle"></div> ${obj.name}`)).join('<br>');
D'accord, merci! Cela fonctionne presque, maintenant la couleur de la bordure ne fonctionne pas
J'aime votre réponse, c'est ce que je recherche, mais il doit y avoir une faute de frappe. Parce que je ne vois plus de couleur
Regardez Maheer Ali Answer. C'est presque la même chose et ça marche
Je pense que parce que vous avez écrit objet au lieu d'obj
vous pouvez faire
var validate = data.every(obj => obj.category));
il vérifie si chaque objet a une catégorie
en savoir plus https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/every
Essayez d'utiliser l'instruction if / else, comme ceci:
const myFunc = () => { let data = [{ name: 'abc', category: { color: 'red' } }, { name: 'def', category: { color: 'blue' } }, { name: 'ghi' }, ]; let result = (data.map(obj => { if (obj.category) return `<div style="border-color:${obj.category.color}" class="circle"></div> ${obj.name}` else return `${obj.name}` })).join('<br>'); console.log(result); } myFunc();
Il vous manque return
@SergeK. Vous avez raison. Nous devrions l'attribuer à une nouvelle variable et la retourner comme un nouveau tableau.
data.map (obj => obj.category);
renverra un tableau qui est véridique.
Vous pouvez utiliser l'opérateur ternaire
return (data.map(obj => obj.category ? `<div style="border-color:${obj.category.color}" class="circle"></div> ${obj.name}` : `${obj.name}`)).join('<br>');
Un peu bizarre, mais bon, j'ai aussi fait des choses bizarres. La raison du deuxième résultat est qu'il semblait étrange d'avoir nom en dehors de la div . Quoi qu'il en soit, le voici. Si ce n'est pas ce que vous demandez réellement, clarifiez et je mettrai à jour la réponse.
let data = [ { name: 'joe', category: { color: 'red' } }, { name: 'bob', category: { color: 'green' } }, { name: 'john', category: { color: 'blue' } }, { name: 'betty' }, { name: 'jane', category: { color: 'orange' } }, ]; let result = (data.map(obj => obj.category && obj.category.color ? `<div style="border-color:${obj.category.color}" class="circle"></div> ${obj.name}` : obj.name )).join('<br>\n'); console.log( 'first result' ); console.log(result); result = (data.map(obj => obj.category && obj.category.color ? `<div style="border-color:${obj.category.color}" class="circle">${obj.name}</div>` : obj.name )).join('<br>\n'); console.log( '\nsecond result' ); console.log( result );
ce qui n'est pas valide
@ashishsingh L'erreur dans la console est
TypeError: obj.category est indéfini
obj.category ne se ferme pas
- Lacatégorie
n'existe pas pour tous les éléments ou pour certains éléments?@Prasun Pour tous ou pour aucun