web-dev-qa-db-fra.com

Boucle via JSON dans EJS

J'ai des codes dans EJS ci-dessous,

<script>
    var row =<%-JSON.stringify(data)%>
    console.log(row);
</script>
<% for(var i=0; i<JSON.stringify(data).length; i++) {%>
   <tr>
     <td>
       <%= JSON.stringify(data)[i].id%>
     </td>
   </tr>
<% } %>

la sortie de la ligne est correcte, un tableau de 3 objets, chacun avec les propriétés id, name etc .. Je peux manipuler la ligne pour peupler la table dans JS. Cependant, je me demande s’il existe un moyen de permettre que cela se fasse de la manière indiquée ci-dessus.

Lorsque j'exécute le code ci-dessus, JSON.stringify (data) .length n'est pas 3, mais plutôt la longueur de la chaîne entière.

Une autre question est quand j'essaie d'ajouter

<% alert ('t'); %> ou <% window.alert ('t'); %>, cela me donne une erreur 'non définie' ...

Des aides appréciées.

Cordialement Marteau

37
Hammer

JSON.stringify renvoie un String. Donc, par exemple:

var data = [
    { id: 1, name: "bob" },
    { id: 2, name: "john" },
    { id: 3, name: "jake" },
];

JSON.stringify(data)

retournera l'équivalent de:

"[{\"id\":1,\"name\":\"bob\"},{\"id\":2,\"name\":\"john\"},{\"id\":3,\"name\":\"jake\"}]"

en tant que valeur String.

Alors quand tu as

<% for(var i=0; i<JSON.stringify(data).length; i++) {%>

ce à quoi cela ressemble est:

<% for(var i=0; i<"[{\"id\":1,\"name\":\"bob\"},{\"id\":2,\"name\":\"john\"},{\"id\":3,\"name\":\"jake\"}]".length; i++) {%>

ce qui est probablement pas ce que vous voulez. Ce que vous voulez probablement ressemble à ceci:

<table>
<% for(var i=0; i < data.length; i++) { %>
   <tr>
     <td><%= data[i].id %></td>
     <td><%= data[i].name %></td>
   </tr>
<% } %>
</table>

Ceci affichera le tableau suivant (en utilisant l'exemple data ci-dessus):

<table>
  <tr>
    <td>1</td>
    <td>bob</td>
  </tr>
  <tr>
    <td>2</td>
    <td>john</td>
  </tr>
  <tr>
    <td>3</td>
    <td>jake</td>
  </tr>
</table>
73
rossipedia

JSON.stringify (data) .length renvoie la longueur de la chaîne et non la longueur de l'objet, pouvez-vous utiliser Object.keys.

<% for(var i=0; i < Object.keys(data).length ; i++) {%>

https://stackoverflow.com/a/14379528/3224296

0
Parsa