Подтвердить что ты не робот

Петля через JSON в EJS

У меня есть коды в 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 объектов, каждый с идентификаторами свойств, именем и т.д. Я могу манипулировать строкой, чтобы заполнить таблицу в JS. Тем не менее, я задаюсь вопросом, есть ли способ разрешить это с помощью вышеуказанного способа?

Когда я запускаю код выше, JSON.stringify(data).length не 3, а длина всей строки.

Еще вопросы: когда я пытаюсь добавить

<% alert ('t'); % > или <% window.alert('t'); % > , это дает мне "не определенную" ошибку...

Помогает оценить.

Отношения Молоток

4b9b3361

Ответ 1

JSON.stringify возвращает a 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>

Ответ 2

JSON.stringify(data).length возвращает длину строки, а не длину объекта, вы можете использовать Object.keys.

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

fooobar.com/info/41167/...