1. ホーム
  2. node.js

[解決済み] EJSでJSONをループスルーする

2022-03-13 12:39:18

質問

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>
<% } %>

行の出力は正しく、3つのオブジェクトの配列で、それぞれid、nameなどのプロパティを持っています。JSで行を操作して、テーブルをポップアップすることができます。しかし、私はそれが上記の方法で行うことができるようにする方法があるかどうか疑問に思っています?

上記のコードを実行すると、JSON.stringify(data).lengthが3ではなく、文字列全体の長さになります。

もう一つの疑問は

<% alert('t'); %> or <% window.alert('t'); %>, it gives me 'not defined' error....

よろしくお願いします。

お問い合わせ先 ハンマー

解決方法は?

JSON.stringify が返されます。 String . だから、例えば

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

JSON.stringify(data)

は同等のものを返します。

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

として String の値を指定します。

そのため

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

ということになるのですが、結局どうなんでしょう。

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

というのは、おそらく ない を使用します。おそらくあなたが する のようなものです。

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

これにより、以下のような表が出力されます(例として 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>