0
votes

La boucle JavaScript s'exécute dans le mauvais ordre

J'ai une fonction code> où je souhaite créer une liste non ordonnée code> à partir d'un tableau code>. Le tableau code> est imbriqué et donc un autre

    code> doit être créé après un nouveau tableau code> démarré. La fonction fonctionne, mais il n'y a qu'un seul problème: la liste non ordonnée code> ne s'affiche pas dans le bon ordre. Je ne sais pas pourquoi parce que j'ai fait la même fonction code> dans php code> et là, il est affiché dans le bon ordre. Le tableau code> est comme suit: xxx pré>

    ceci est mon javascript fonction code>: p> xxx pré> La sortie de html code> est la suivante: p>

    • Aanwezigen / Afwebezigen Li>
    • Agenda Toevoegingen Li>
    • Mettre à jour OpenStaande Actiepunten Li>
    • JAARREKENING 2018 LI>
    • Komende Periode Li>
    • OPLEZEN ACTIEPUNTEN LI>
    • rondvraag li>
    • marketing
      • SITE WEB LI>
      • Médias sociaux LI>
      • Nieuwsbrief Li> ul> li>
      • Acquisitie
        • mène li>
        • offres li>
        • Netwerk Li> ul> li>
        • inkoop
          • LeveranCiers li>
          • Marges li> ul> li> ul>

            Comme vous pouvez le voir place le html code> généré dans le if-instruction code> à la fin de la liste non ordonnée code> ça ne devrait pas. Des conseils sur la façon de s'attaquer à ce problème? Ou toute explication pourquoi elle ne fonctionne pas la même chose que dans php code>? P>

            mise à jour: strong> p>

            quand je console.log code> Le tableau code> sujets code>, il ressemble à ceci: p>

            (10) [Array(2), Array(2), Array(2), Array(2), Array(2), Array(2), Array(2), Array(2), Array(2), Array(2)]
            0: (2) ["0", "Aanwezigen / afwezigen"]
            1: (2) ["1", "Toevoegingen agenda"]
            2: (2) ["2", "Update openstaande actiepunten"]
            3: (2) ["3", "Jaarrekening 2018"]
            4: (2) ["4", "Komende periode"]
            5: (2) ["5", "Oplezen actiepunten"]
            6: (2) ["6", "Rondvraag"]
            7: Array(2)
            0: "Marketing"
            1: (3) ["Website", "Social media", "Nieuwsbrief"]
            length: 2
            __proto__: Array(0)
            8: Array(2)
            0: "Acquisitie"
            1: (3) ["Leads", "Deals", "Netwerk"]
            length: 2
            __proto__: Array(0)
            9: Array(2)
            0: "Inkoop"
            1: (2) ["Leveranciers", "Marges"]
            length: 2
            __proto__: Array(0)
            length: 10
            __proto__: Array(0)
            


5 commentaires

Comment variables à JS ressemble? Celui que vous avez posté ci-dessus est en php


J'ai mis à jour ma réponse @saharsh. On dirait que la commande n'est pas juste là déjà. J'ai créé les Sujets TRAY comme ceci: const topics = objet.tries (réponse.data); . Où réponse.data est le tableau comme je l'ai eu à partir de php


On dirait que la commande de tableau a été faussée avant que cette boucle soit exécutée. Essayez de vérifier votre réponse aussi.


@Baspa L'ordre du tableau renvoyé par Object.entries () ne dépend pas de la définition d'un objet. S'il y a besoin de certains commandes, le tableau doit d'abord être trié comme objet.entries (obj) .sort ((a, b) => B [0] .Localecompare (A [0])); < / Code> Voir Ce


Vous essayez d'itérer un tableau imbriqué PHP en JavaScript. Utilisez un objet JavaScript à la place, comme Ceci par exemple.


3 Réponses :


1
votes

Sachez que JSON a des objets et des tableaux, tandis que PHP confonde les deux en un seul type. JSON ne préserve pas l'ordre des objets; Si vous souhaitez la commande, assurez-vous d'utiliser des tableaux (c'est-à-dire à l'aide d'indices numériques consécutifs en PHP, aucune touche de chaîne). Cela impliquerait une restructuration de votre réseau. Par exemple, une liste d'éléments, où chaque article consiste en un nom et une liste d'enfants: xxx

Cette structure préserve la commande et est facile à itération sur JavaScript.


2 commentaires

J'ai essayé cette structure mais cela n'a pas préservé la commande, j'ai eu la même sortie qu'auparavant.


Il est littéralement impossible d'obtenir la même sortie qu'avant, sauf si vous avez modifié la mauvaise partie de votre code ou de votre cache. D'une part, vous devrez également avoir adapté le JavaScript.



1
votes

Vous devez également modifier votre fonction à l'écart de la modification des données de JSON au tableau.

Votre fonction devrait quelque chose comme ci-dessous. P>

for (const value of topics) {

  if (Array.isArray(value) && value.length > 1) {
    HTML = HTML + "<li>" + value[0] + "</li>";

    for (let i = 0; i < value[1].length; i++) {
      HTML = HTML + "<ul>";
      HTML = HTML + "<li>" + value[1][i] + "</li>";
      HTML = HTML + "</ul>";
    }
  } else {
    HTML = HTML + "<li>" + value[0] + "</li>";
  }
}


0 commentaires

3
votes

Utilisez un objet JavaScript. Itérez-le comme ceci:

p>

<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css">
<div id="container"></div>


0 commentaires