web-dev-qa-db-ja.com

EJSでJSONをループする

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'); %>または<%window.alert( 't'); %>、「未定義」エラーが表示されます...

感謝します。

ハンマーに関して

37
Hammer

JSON.stringifyStringを返します。したがって、たとえば:

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++) {%>

これはおそらくnotあなたが望むものです。おそらくdoにしたいのは次のようなものです:

<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>
73
rossipedia

JSON.stringify(data).lengthはオブジェクトの長さではなく文字列の長さを返します。Object.keysを使用できます。

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

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

0
Parsa