如何统计IPC状态JSON数据中各status值的出现次数?
统计IPC状态数量的解决方案
核心实现思路
用Array.reduce()可以高效完成分组统计,也可以用普通循环实现,以下是两种可行方案,针对alert、NOT_COMMUNICATING和空值(代表正常)三类状态做统计:
示例数据
假设你的JSON数据结构如下:
const ipcData = { ipc_status: [ { status: "alert" }, { status: "" }, { status: "NOT_COMMUNICATING" }, { status: "alert" }, { status: null }, { status: "NOT_COMMUNICATING" }, { status: " " }, // 处理带空格的空值 { status: undefined }, { status: "alert" } ] };
方案一:使用reduce(推荐)
const statusStats = ipcData.ipc_status.reduce((counts, item) => { // 统一处理空值、null、undefined和空白字符串 const currentStatus = item.status?.trim() ?? ""; switch(currentStatus) { case "alert": counts.alert += 1; break; case "NOT_COMMUNICATING": counts.notCommunicating += 1; break; default: counts.normal += 1; } return counts; }, { alert: 0, notCommunicating: 0, normal: 0 }); console.log(statusStats); // 输出:{ alert: 3, notCommunicating: 2, normal: 4 }
方案二:使用普通循环
如果对reduce不太熟悉,普通循环的写法更直观:
let alertCount = 0; let notCommCount = 0; let normalCount = 0; for (const item of ipcData.ipc_status) { const currentStatus = item.status?.trim() ?? ""; if (currentStatus === "alert") { alertCount++; } else if (currentStatus === "NOT_COMMUNICATING") { notCommCount++; } else { normalCount++; } } const statusStats = { alert: alertCount, notCommunicating: notCommCount, normal: normalCount }; console.log(statusStats); // 输出结果和reduce方案一致
关键细节说明
- 用
item.status?.trim()处理可能的undefined或null,避免运行报错; - 用
?? ""把null/undefined统一转为空字符串,简化后续判断逻辑; trim()处理带空格的"空值",避免把" "这类空白字符串误判为非正常状态。
内容的提问来源于stack exchange,提问作者code_freshgirl
相关产品推荐
相关产品推荐

