Boucle à travers 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 row est correcte, un tableau de 3 objets, chacun avec des propriétés id, name etc.. Je peux manipuler la ligne pour popuate la table dans JS. Cependant, je me demande s'il existe un moyen de permettre que cela se fasse de la manière ci-dessus?

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

Une autre question est quand j'essaie d'ajouter

Ou , cela me donne une erreur' non définie'...

Aide apprécié.

Cordialement Marteau

30
demandé sur Hammer 2014-04-09 07:07:56

1 réponses

JSON.stringify retourne un String. Ainsi, par exemple:

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

JSON.stringify(data)

Renvoie l'équivalent de:

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

Comme valeur String.

Donc quand vous avez

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

Ce qui finit par ressembler est:

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

, Qui est probablement pas ce que vous voulez. Ce que vous voulez probablement est quelque chose comme ceci:

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

Cela 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>
54
répondu rossipedia 2014-04-09 04:42:09