0
votes

Color TD basé sur la valeur du champ d'objet angulaire 6

J'ai une table et je veux basé sur une propriété, pour colorer des lignes comme ceci: Si compte est identique, de les colorer avec gris, et sinon, de les colorer avec bleu. Voici mon code: xxx

mais ça ne fonctionne pas correctement. Comment puis-je modifier le code? Voici un blitzstack de travail

Je reçois aussi cette erreur: (i Devinez que c'est de liste [i + 1] )

Erreur d'erreur

Impossible de lire la propriété 'compte' de indéfini


7 commentaires

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]


pour (laisser i = 0; i devrait être `pour (laissez i = 0; i Liste [i + 1] résout à un objet non non défini


Je suggérerais foreach () 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.


4 Réponses :


2
votes

erreur d'index de base.

Vous en boucle sur l'ensemble de la matrice (de 0 code> à this.list.longueur code>) puis essayez d'accéder à . .List [i + 1] code>. P>

boucle de 0 code> à this.list.longueur - 1 code> p>

for (let i = 0; i < this.List.length - 1; i++) {


4 commentaires

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».



2
votes

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


5 commentaires

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 , 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 . raté le signe égal



0
votes

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.

Bien sûr, vous auriez moins de contrôle sur quelle couleur serait utilisé.


0 commentaires

1
votes

Cette réponse n'est valide que si l'exigence est la suivante:

  • Toutes les lignes dont la rangée précédente ou suivante avec le même compte doit être colorée en gris. Sinon, ils sont colorés en bleu
  • Une seule ligne est en bleu (ne peut avoir le même compte avec une autre rangée)
  • Un compte qui apparaît plusieurs fois mais non dans des rangées consécutives sont colorées en bleu
  • Les lignes sont supposées non achouées (de sorte que les lignes de tri à nouveau rendront des rangées de couleur de couleur)

    En outre, il est bon de savoir que dans JavaScript foreach est censé suivre l'ordre du tableau.

    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é).

    L'idée est la suivante:

    • boucle à travers tous les éléments mais l'ordre ne doit pas avoir d'importance!
    • Si la ligne précédente ou suivante a le même compte, puis appliquez les règles ci-dessus xxx

0 commentaires