E2——日志分析器(简单筛选与计数器)
解析内存中的日志行数组,按级别或关键词筛选,并使用 Map 统计事件。保持代码小巧易读
E2——日志分析器(简单筛选与计数器) 是 CoddyKit 上的免费 JavaScript Academy 课时。 这是第 2 节课,共 3 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 JavaScript Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 JavaScript Academy 课程共包含 3 节课。
我们要构建的内容
目标:在内存中分析日志。
- 将各行表示为简短字符串
- 按level或关键词过滤
- 使用Map计数
- 让函数保持简短清晰

数据与解析器
为每一行创建一个简单结构:time、level 和文本。这已经足够用于过滤和计数。
// Simulated log lines (time level message)
const LINES = [
"10:00 INFO Start app",
"10:01 WARN Low memory",
"10:02 INFO User login /home",
"10:03 ERROR DB timeout",
"10:04 INFO User login /products",
"10:05 ERROR Network fail",
"10:06 WARN Retry request"
];
// Tiny parser: returns { time, level, text }
function parseLine(line) {
// split on spaces, compact, then rebuild pieces
const parts = line.trim().split(/\\s+/);
if (parts.length < 3) return null;
const time = parts[0];
const level = parts[1];
const text = parts.slice(2).join(" ");
return { time: time, level: level, text: text };
}
console.log("parsed:", parseLine(LINES[2]));
过滤基础
针对每个常见问题编写小型过滤函数。简短易读胜过炫技。
// Filter by level or by keyword (case-sensitive for simplicity)
function filterByLevel(lines, want) {
const out = [];
for (const line of lines) {
const p = parseLine(line);
if (p && p.level === want) out.push(p);
}
return out;
}
function filterByKeyword(lines, word) {
const out = [];
for (const line of lines) {
const p = parseLine(line);
if (p && p.text.indexOf(word) !== -1) out.push(p);
}
return out;
}
console.log("ERRORs:", filterByLevel(LINES, "ERROR").length);
console.log("login :", filterByKeyword(LINES, "login").length);
使用 Map 计数
使用Map进行计数:更新速度快,而且可以方便地读取每个键的结果。
// Count how many lines per level
function countByLevel(lines) {
const counts = new Map();
for (const line of lines) {
const p = parseLine(line);
if (!p) continue;
const old = counts.get(p.level) || 0;
counts.set(p.level, old + 1);
}
return counts;
}
const c = countByLevel(LINES);
console.log("INFO :", c.get("INFO"));
console.log("WARN :", c.get("WARN"));
console.log("ERROR:", c.get("ERROR"));
前 N 项示例
进行少量字符串提取,再使用计数 Map 排名。让解析规则保持简单。
// Extract a path after "User login " and rank by frequency
function topLoginPaths(lines, k) {
const freq = new Map();
for (const line of lines) {
const p = parseLine(line);
if (!p) continue;
const mark = "User login ";
const idx = p.text.indexOf(mark);
if (idx !== -1) {
const path = p.text.slice(idx + mark.length).trim();
const old = freq.get(path) || 0;
freq.set(path, old + 1);
}
}
// turn into array and sort descending by count
const arr = Array.from(freq.entries());
arr.sort(function (a, b) { return b[1] - a[1]; });
return arr.slice(0, k);
}
console.log("top paths:", topLoginPaths(LINES, 3));
初学者指南
提示:
- 先编写一个小型解析器。
- 针对每个问题编写小型过滤辅助函数。
- 使用Map计数。
- 对于初学者,优先使用简单字符串和清晰的循环。

使用 Map 计数测验
快速检查:计数结构。

总结
总结:将数据解析为简单结构,按 level/关键词过滤,并使用Map计数。让每个辅助函数都简短明确。

常见问题解答
「E2——日志分析器(简单筛选与计数器)」课时是免费的吗?
是的 — 「E2——日志分析器(简单筛选与计数器)」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 JavaScript Academy 课程的其余内容,请升级到 CoddyKit PRO。 JavaScript Academy 课程共包含 3 节课。
「E2——日志分析器(简单筛选与计数器)」这节课中我会学到什么?
解析内存中的日志行数组,按级别或关键词筛选,并使用 Map 统计事件。保持代码小巧易读 你通过在浏览器中直接运行的动手代码来练习 JavaScript Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 JavaScript Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 JavaScript Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 3 节。
「E2——日志分析器(简单筛选与计数器)」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 JavaScript Academy 课中编写并运行代码吗?
能。每节 JavaScript Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- E1——表达式求值器(第 1 部分:+ 和 -,从左到右)
- E2——日志分析器(简单筛选与计数器)
- E3——Promise 池/队列(异步并发)