nodejs ejs 将数组对象渲染到 table

nodejs ejs render array object in to table

美好的一天 我需要从数据库中写一个 table 并且我无法访问这些值,如果数组大于 1... 如果我这样做:

    //spielzeiten
   var spielzeitenArr = [{
        spzeit: "",
        spielzeit_id: "",
    }];
    var spzeitData = await myDB.selectSpielzeit();

    for (var i = 0; i < 1/*spzeitData.length*/; i++) {
        spielzeitenArr[i].spzeit = "meine Zeit" /*spzeitData.spzeit*/;
        spielzeitenArr[i].spielzeit_id = "meine ID"/*spzeitData.spielzeit_id*/;
    }

        res.render('index', {
            firmen: firmanameArr,
            block: blocknameArr,
            datei: dateinameArr,
            jinglein: jingleinArr,
            jingleout: jingleoutArr,
            szdata: spielzeitenArr
        });

在 ejs 方面,它看起来像这样:

        <table id="todoTable">
            <tr>
                <td class="tdList">Datum</td>
                <td class="tdList">Zeit</td>
                <td class="tdList">Start Jingle</td>
                <td class="tdList">End Jingle</td>
                <td class="tdList">Name</td>
                <td class="tdList">
                    <div class="select-wrapper">
                        <select id="categoryFilter" class="selectCompany"></select>
                    </div>
                </td>

                <% szdata.forEach((item) => { %>
            <tr></tr>
            <td><%= item.spzeit %></td>
            <td><%= item.spielzeit_id %></td>
            <% }); %>
        </table>

如果我使用我的硬编码值,它就可以工作。但是如果我尝试将 i 值更改为 2 或更多,它会给我一个错误...为什么会这样?

非常感谢您的帮助!

您正在初始化长度为 1 的 spielzeiten 数组,如果您有多个记录,则不会增加其大小。因此,当然,如果您尝试访问索引不同于 0 的 spielzeiten[i].spzeit,则会出现错误。

您可能应该将数组初始化为空数组并在循环期间添加新项。

spielzeiten = [];

for (let i = 0; i < spzeitData.length; i++) {
  spielzeiten.push({
    spzeit: spzeitData[i].spzeit,
    id: spzeitData[i].spielzeit_id
  });
}

您也可以使用 Array.map 函数直接初始化您的数组

let spielzeiten = spzeitData.map(d => ({ 
  spzeit: d.spzeit, 
  id: d.spielzeit_id
}));