JavaScript动态对象键ejs

JavaScript dynamic object keys ejs

本文关键字:ejs 对象 动态 JavaScript      更新时间:2023-09-26

我真的找不到描述这一点的方法。从本质上讲,我有一个数据库,它可以包含任意数量的具有不同列长度和名称的表。我有一个表,它定义了每个表及其列。我有一个查询来搜索这些表中的值,并使用express将搜索结果和列传递给ej。我需要的是呼应结果。我确实有:

<div class="row">
<table>
    <thead>
        <tr>
            <% columns.forEach(function(column) { %>
                <th><%= column %></th>
            <% }); %>
        </tr>
    </thead>
    ...

这将正确输出表头中列的名称。然而,我一辈子都不知道如何打印实际结果。我尝试了很多不同的方法,但我一直得到的都是未定义的或[Object-Object]。我现在有这个:

<tbody>
        <% for(var r = 0; r < results.length; r++) { %>
            <tr>
                ... need to access column here ...
            </tr>
        <% } %>
    </tbody>

我首先尝试了以下(上面的内部)

<% for(var key in Object.keys(results[r])) { %>
    <%= results[r].key %>
<% } %>

随之而来的是许多不同的尝试。我想问题在于不知道可能的关键字名称。老实说,我甚至不知道该搜索什么。我的脑子一片空白。

非常感谢您的帮助。

Object.keys返回一个对象中所有键的数组。您可以使用forEach迭代这些键,通过object[key] 访问对象的值

此外,您可以在结果中使用forEach而不是for来保持干净。

<% results.forEach(function (result) { %>
  <tr>
  <%  Object.keys(result).forEach(function (key) { %>
    <td><%= result[key] %> </td>
  <% }) %>
  </tr>
<% }) %>

现代浏览器现在有箭头,所以可以稍微简化一下:

<% results.forEach(result => { %>
  <tr>
  <%  Object.keys(result).forEach(key => { %>
    <td><%= result[key] %> </td>
  <% }) %>
  </tr>
<% }) %>