0
votes

Si / sinon condition à l'intérieur de pourcheach

Je développe un projet angulaire. J'ai un fichier de table, je veux comparer chaque élément avec une valeur de données si elle est correcte, je ferai une déclaration d'autre, je ferai un autre comprérement, mais mon problème est que même les données sont correctes, il récupère toujours tout le tableau et doit accéder à la sinon pour un très peu de temps. Comment éviter cela, s'il vous plaît.

Voici mon code: P>

if (this.data) {
  this.imgNotFoundText = '';
  this.data.package.files.forEach(element => {
    i++;
    this.picture = '';
    if (element.name == this.data.properties.Name) {
      this.picture = 'picOne.png'
    }
    if (i == this.data.package.files.length && this.picture == '') {
      this.picture = './../assets/img/notFound.jpg'
    }
  });
}


8 commentaires

"Il va toujours chercher à toute la table et doit accéder à l'autre pour un temps très court" il n'y a pas de sinon dans votre code ...?


Lorsque vous demandez de l'aide, il est préférable d'indenter votre code de manière cohérente, assez standard, car cela aide les personnes à lire et à comprendre votre code. (C'est utile quand vous êtes pas demander de l'aide aussi.)


l'autre est la seconde si


Séparément: il semble suspect de toujours faire this.picture = ''; inconditionnellement dans la boucle. Si vous allez faire cela, vous ne pouvez aussi bien que regarder la dernière entrée de la matrice. Vous voulez probablement déplacer cela à avant le foreach appel.


Non, il y a une grande différence entre deux si s dans une ligne et si / sinon si .


même je l'ai fait d'autre si j'avais le même résultat: /


@Mat pouvez-vous poster l'exemple Stackblitz?


Veuillez mettre à jour votre question avec un exemple de reproductible minimal démontrer le problème, idéalement un Runnable un Utilisation des extraits de pile (le bouton [<>] Bouton de la barre d'outils; Voici comment faire un ) .


3 Réponses :


5
votes

Je vois quelques problèmes possibles:

  1. Il semble suspect de toujours faire this.picture = ''; code> inconditionnellement dans la boucle. Si vous allez faire cela, vous ne pouvez aussi bien que regarder la dernière entrée de la matrice. Vous voulez probablement déplacer cela pour avant em> le foreach code> appel. P> li>

  2. Vous avez parlé d'un sinon code>, mais il n'y a pas de sinon code> dans votre code. Vous avez deux si code> s dans une ligne, mais le résultat du premier si code> n'a aucun effet du tout sur le second. Vous avez peut-être recherché sinon si code>. Ensuite, le second si code> n'est pas effectué si la condition dans le premier si code> était vrai. P> li> ol>

    Donc, si ces deux supposées sont correctes: P>

    if (this.data) {
        this.imgNotFoundText = '';
        const {files} = this.data.package;
        this.picture = files.length ? './../assets/img/notFound.jpg' : '';
        for (const {name} of files) {
            if (name == this.data.properties.Name) {
                this.picture = 'picOne.png'
                break;
            }
        }
    }
    


0 commentaires

0
votes

Vous ne savez pas quel est votre objectif, mais vous êtes simplement itération de la liste et définir la valeur de l'image à chaque fois, cela signifie que vous aurez la valeur de l'image du dernier élément.

Si votre objectif est d'afficher une image "non trouvée" pour les éléments qui n'ont pas de fichiers, vous devez disposer d'un tableau de photos qui reflète la matrice de fichiers (ou ajoutez une image de propriété à chaque fichier). < / p>


2 commentaires

Mon problème que même j'ai un fichier, la photo de NotFound est affichée pendant une courte période, la bonne image affichée


Cela suggère que vous devriez utiliser une variable temporaire pour stocker le résultat et l'attribuer à ceci.picture seulement après la fin du cycle. De plus, une déclaration au premier résultat réussi doit être utilisée comme dans la réponse précédente.



0
votes

On dirait que vous pouvez utiliser Array. prototype.some xxx

il retournera picone.png si l'un des éléments de données.backage.files a un nom identique à celui de this.data.properties.name ou it'll renverser nofind.jpg

bien que cela puisse


0 commentaires