You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用JavaScript从多维数组创建并填充多张表格

如何用JavaScript从带键的多维对象生成多张表格?

我明白你的问题啦——之前你处理的是无键的普通数组,现在拿到的是一个以员工姓名为键、对应打卡记录数组的对象,确实需要调整遍历逻辑,不需要复杂的嵌套循环,用Object.entries()就能轻松搞定,下面是具体的修改方案:

修改后的核心代码(替换原success函数内的表格生成部分)

success:function(data){
    console.log(data)
    // 初始化总HTML,用来拼接所有表格
    var totalHtml = '';

    // 遍历对象的键值对:key是员工姓名,value是该员工的打卡记录数组
    Object.entries(data).forEach(([employeeName, records]) => {
        // 为每个员工生成一张独立表格
        var tableHtml = `
        <div class="employee-table-container">
            <h4>${employeeName}</h4>
            <table class="table table-striped table-condensed table-responsive">
                <thead>
                    <tr>
                        <th>Employee</th>
                        <th>Time In</th>
                        <th>Time Out</th>
                        <th>Total Time</th>
                        <th>Action</th>
                    </tr>
                </thead>
                <tbody>
        `;

        // 遍历当前员工的每条打卡记录
        records.forEach(record => {
            tableHtml += `
            <tr>
                <td class="table_data" data-row_id="${record.id}" data-column_name="id" >${record.first_name} ${record.last_name}</td>
                <td><input type="text" class="dateedit" data-row_id="${record.id}" data-column_name="clock_in" value="${record.clock_in}"></td>
                <td><input type="text" class="dateedit" data-row_id="${record.id}" data-column_name="clock_out" value="${record.clock_out}"></td>
                <td class="table_data" data-row_id="${record.id}" data-column_name="time">${record.time}</td>
                <td><button type="button" name="delete_btn" id="${record.id}" class="btn btn-xs btn-danger btn_delete"><span class="glyphicon glyphicon-trash"></span></button></td>
            </tr>
            `;
        });

        // 闭合当前表格的标签
        tableHtml += `
                </tbody>
            </table>
        </div>
        `;

        // 将当前员工的表格追加到总HTML中
        totalHtml += tableHtml;
    });

    // 将所有表格插入到页面容器
    $('#tables').html(totalHtml);

    // 初始化datetimepicker(和你原来的逻辑一致)
    $('.dateedit').each(function(){
        $(this).datetimepicker({
            format: "YYYY-MM-DD H:mm:ss",
            sideBySide: true
        });
    });
}

关键逻辑说明

  • Object.entries(data):这个方法会把你的对象转换成键值对数组,比如[["John Snow", [...]], ["Frank Thomas", [...]]],这样我们就能同时拿到员工姓名和对应的打卡记录。
  • 每张表格独立生成:对每个员工单独创建表格,还可以加上员工姓名的标题,让页面结构更清晰。
  • 保留原有功能:你之前的编辑框、删除按钮、datetimepicker初始化逻辑完全保留,只是调整了遍历数据的方式。

替代遍历方式(如果你习惯用for循环)

如果你不想用forEach,也可以用for...in循环来遍历对象:

for (const employeeName in data) {
    if (data.hasOwnProperty(employeeName)) {
        const records = data[employeeName];
        // 后续生成表格的逻辑和上面一致
    }
}

这样修改后,就能根据每个员工的打卡记录生成独立的表格啦,完全适配你现在的多维对象结构~

内容的提问来源于stack exchange,提问作者XxnumbxX

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 09:22:22