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

如何为每个新LOGIN生成数据行,汇总READY与NOT_READY时长

解决方案

以下是修改后的代码,能够处理多轮登录会话,包括未完成(无LOGOUT)的会话:

<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script>
$(document).ready(function(){
    let displayArray = [];
    let currentSession = null; // 存储当前正在统计的会话数据

    const localArray = [
        {"state":"LOGIN","startTime":"10.25"},
        {"state":"READY","startTime":"10.26","endTime":"10.35","duration":"615"},
        {"state":"NOT_READY","startTime":"11:26","endTime":"10.35","duration":"874"},
        {"state":"READY","startTime":"10.26","endTime":"10.35","duration":"222"},
        {"state":"NOT_READY","startTime":"11:26","endTime":"10.35","duration":"111"},
        {"state":"READY","startTime":"10.26","endTime":"10.35","duration":"333"},
        {"state":"NOT_READY","startTime":"11:26","endTime":"10.35","duration":"888"},
        {"state":"READY","startTime":"10.26","endTime":"10.35","duration":"444"},
        {"state":"NOT_READY","startTime":"11:26","endTime":"10.35","duration":"999"},
        {"state":"LOGOUT","startTime":"13.26"},
        // 再次登录
        {"state":"LOGIN","startTime":"08.58"},
        {"state":"READY","startTime":"10.26","endTime":"10.35","duration":"12"},
        {"state":"NOT_READY","startTime":"11:26","endTime":"10.35","duration":"13"},
        {"state":"READY","startTime":"10.26","endTime":"10.35","duration":"14"},
        {"state":"NOT_READY","startTime":"11:26","endTime":"10.35","duration":"15"},
        {"state":"READY","startTime":"10.26","endTime":"10.35","duration":"16"},
        {"state":"NOT_READY","startTime":"11:26","endTime":"10.35","duration":"17"},
        {"state":"READY","startTime":"10.26","endTime":"10.35","duration":"18"},
        {"state":"NOT_READY","startTime":"11:26","endTime":"10.35","duration":"19"}
    ];

    for(let i=0;i<localArray.length;i++){
        const tempOBJ = localArray[i];
        
        if(tempOBJ.state === "LOGIN"){
            // 如果已有未完成的会话,先存入结果
            if(currentSession){
                displayArray.push({...currentSession});
            }
            // 初始化新会话
            currentSession = {
                loginTime: tempOBJ.startTime,
                readyDuration: 0,
                notReadyDuration: 0,
                logOutTime: null
            };
        }
        else if(tempOBJ.state === "READY" && currentSession){
            currentSession.readyDuration += parseInt(tempOBJ.duration);
        }
        else if(tempOBJ.state === "NOT_READY" && currentSession){
            currentSession.notReadyDuration += parseInt(tempOBJ.duration);
        }
        else if(tempOBJ.state === "LOGOUT" && currentSession){
            currentSession.logOutTime = tempOBJ.startTime;
            // 会话结束,存入结果
            displayArray.push({...currentSession});
            currentSession = null;
        }
    }

    // 遍历结束后,检查是否还有未完成的会话(无LOGOUT)
    if(currentSession){
        displayArray.push({...currentSession});
    }

    // 生成所有表格行
    let rows = "";
    displayArray.forEach(session => {
        rows += `<tr>
            <td>${session.loginTime || '-'}</td>
            <td>${session.readyDuration}</td>
            <td>${session.notReadyDuration}</td>
            <td>${session.logOutTime || '-'}</td>
        </tr>`;
    });
    
    $('#dataAdd').append(rows);
});
</script>
</head>
<body>
<table border="1">
<thead>
<th>Login Time</th>
<th>Ready Duration</th>
<th>Not_ready Duration</th>
<th>Logout Time</th>
</thead>
<tbody id="dataAdd"></tbody>
</table>

</body>
</html>

关键修改说明

  • 使用currentSession单独存储当前正在统计的会话数据,每遇到新的LOGIN时,先收尾上一个未完成的会话(如果存在),再初始化新会话
  • 遇到LOGOUT时,立即将当前会话存入结果数组,并清空currentSession
  • 遍历结束后,额外检查是否有未完成的会话(即最后一次登录没有对应的LOGOUT),确保这类会话也能被统计展示
  • 最后统一生成所有表格行,避免原代码中每次循环都生成行的冗余操作
  • 对未存在的logOutTime显示-,提升表格可读性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 03:03:21