J'ai une table et je veux basé sur une propriété, pour colorer des lignes comme ceci:
Si mais ça ne fonctionne pas correctement. Comment puis-je modifier le code? Voici un blitzstack de travail p> Je reçois aussi cette erreur: (i Devinez que c'est de Impossible de lire la propriété 'compte' de indéfini p>
blockQuote> p> compte code> est identique, de les colorer avec gris, et sinon, de les colorer avec bleu. Voici mon code:
liste [i + 1] code>) p>
Erreur d'erreur
4 Réponses :
erreur d'index de base.
Vous en boucle sur l'ensemble de la matrice (de boucle de 0 code> à
this.list.longueur code>) puis essayez d'accéder à
. .List [i + 1] code>. P>
0 code> à
this.list.longueur - 1 code> p>
for (let i = 0; i < this.List.length - 1; i++) {
Merci, cela a résolu l'erreur, mais les rangées ont toujours de mauvaises couleurs.
@Tenzolinho Lorsque vous avez mentionné la "mauvaise couleur", quels sont les «mêmes comptes»? En regardant votre code, il semble que "le même compte" signifie "compte de ligne i === compte de la ligne I + 1".
@ Grégory Elhaimer a accepté votre réponse, mais vous devez colorer la dernière ligne :)
@Tnzolinho, s'il vous plaît soyez plus précis sur ce que signifie «même compte».
Essayez ceci dans votre code
func() { const d = this.List.map(e => e.account); this.List.forEach(user => { const length = this.List.filter(s => s.account === user.account).length; user.color = length >= 2 ? "#f2f3f4" : "rgba(173, 216, 230, 0.35)"; }) }
Merci beaucoup, c'est ce que je voulais!
En réalité, cela ne fonctionne pas très bien, si j'ajoute 2 autres lignes à la fin avec le même compte, ils seront colorés avec bleu code>, au lieu de gris.
Avez-vous essayé de relancer la fonction après avoir ajouté les comptes
Veuillez mettre à jour votre stackblitz avec votre exigence afin que nous puissions mieux aider
Mise à jour de la réponse longueur> = 2 code>. raté le signe égal
Un autre bon moyen de résoudre ce problème serait de hacher les noms d'utilisateur dans une couleur. Ainsi, toutes les deux rangées avec le même utilisateur auraient la même couleur. p>
Bien sûr, vous auriez moins de contrôle sur quelle couleur serait utilisé. P>
Cette réponse n'est valide que si l'exigence est la suivante:
En outre, il est bon de savoir que dans JavaScript foreach code>
est censé suivre l'ordre du tableau. P>
foreach () appelle une fonction de rappel fourni une fois pour chaque élément dans une matrice dans l'ordre croissant. Il n'est pas invoqué pour les propriétés d'index supprimés ou non inijialisées (c'est-à-dire des tableaux de rareté). P> blockQuote>
L'idée est la suivante: p>
- boucle à travers tous les éléments mais l'ordre ne doit pas avoir d'importance! em> li>
- Si la ligne précédente ou suivante a le même compte, puis appliquez les règles ci-dessus li> ul>
xxx pré> p>
Est-ce que chaque objet est dans cette.List a un compte de propriété?
Vous devez rechercher le dernier élément, il n'y aura aucune liste
[i + 1] code>
pour (laisser i = 0; i devrait être `pour (laissez i = 0; i Liste [i + 1] code> résout à un objet non non défini
Je suggérerais
foreach () code> itérateur interne pour éviter de telles erreurs
accepter la réponse si vous êtes satisfait
Lorsque vous regardez les réponses, je pense que votre définition des «mêmes comptes» conduit à une erreur. Précisez s'il vous plaît. Parlez-vous de "lignes consécutives"? "Même compte que connecté à l'utilisateur"? "Comptes qui apparaissent plus d'une fois dans la table quelle que soit la position de la rangée"?
Disons que les lignes sont déjà triées à l'intérieur de cette table, sur la base du compte. Donc, ma définition du «même compte» est des lignes consécutives.