在EJS中循环访问JSON

Ham*_*mer 40 ejs node.js

我在下面的EJS中有代码,

<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>
<% } %>
Run Code Online (Sandbox Code Playgroud)

行的输出是正确的,一个包含3个对象的数组,每个对象都有属性id,名称等.我可以操作行来在JS中弹出表.但是,我想知道是否有办法让它以上述方式完成?

当我运行上面的代码时,JSON.stringify(data).length不是3,而是整个字符串的长度.

另一个问题是当我尝试添加时

<%alert('t'); %>或<%window.alert('t'); %>,它给了我'未定义'的错误......

帮助赞赏.

关心锤子

ros*_*dia 78

JSON.stringify返回一个String.所以,例如:

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

JSON.stringify(data)
Run Code Online (Sandbox Code Playgroud)

将返回相当于:

"[{\"id\":1,\"name\":\"bob\"},{\"id\":2,\"name\":\"john\"},{\"id\":3,\"name\":\"jake\"}]"
Run Code Online (Sandbox Code Playgroud)

作为一种String价值.

所以,当你有

<% for(var i=0; i<JSON.stringify(data).length; i++) {%>
Run Code Online (Sandbox Code Playgroud)

最终看起来像是:

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

这可能不是你想要的.什么你可能做的想是这样的:

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

这将输出下表(使用data上面的示例):

<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>
Run Code Online (Sandbox Code Playgroud)