
本文讲解如何在深层嵌套的 JavaScript 对象(如 Trello 类看板数据结构)中,遍历所有 cards 数组并找出 id 字段数值最大的卡片对象,提供高性能循环、函数式链式写法及性能对比分析。
本文讲解如何在深层嵌套的 javascript 对象(如 trello 类看板数据结构)中,遍历所有 `cards` 数组并找出 `id` 字段数值最大的卡片对象,提供高性能循环、函数式链式写法及性能对比分析。
在实际前端开发中(例如看板类应用),我们常遇到类似如下结构的嵌套数据:顶层是 lists 对象,其下每个 list-* 键对应一个列表对象,而每个列表又包含一个 cards 数组。目标是从所有卡片中统一比较 id 字段(字符串形式但需按数值比较),精准提取 id 值最大的那一项(如 "20" > "4" > "3" > "2")。
✅ 推荐方案:高性能原生循环(最优性能)
当数据量较大或对执行效率敏感时(如实时渲染、高频计算),应优先使用传统 for...in + for 双层循环。它避免了中间数组创建、多次函数调用与闭包开销,实测速度最快(基准测试中比其他方案快 1.2–15 倍):
let maxCard = { id: -1 };
for (const key in data.lists) {
const cards = data.lists[key].cards;
for (let i = 0; i < cards.length; i++) {
const card = cards[i];
// 注意:+card.id 将字符串转为数字,确保数值比较(避免 "10" < "2" 的字典序错误)
if (+card.id > maxCard.id) {
maxCard = card;
}
}
}
console.log(maxCard); // { id: "20", title: "title" }⚠️ 注意事项:
- 确保 data.lists 是普通对象(非 Map 或 null),且每个 list 都有 cards 数组;
- 使用一元加号 +card.id 强制类型转换,避免字符串字典序比较导致逻辑错误;
- 初始化 maxCard.id = -1 可安全兼容所有非负整数 ID;若 ID 可能为负数,请改用 -Infinity。
✅ 替代方案:函数式写法(兼顾可读性与简洁性)
若更重视代码可维护性与表达力,可选用链式方法。以下为优化后的 reduce 单行解法(比 flat() + sort() 更高效,不修改原数组、不创建冗余中间结构):
const maxCard = Object.keys(data.lists).reduce(
(max, key) =>
data.lists[key].cards.reduce(
(c, card) => (+card.id > c.id ? card : c),
max
),
{ id: -1 }
);
console.log(maxCard); // { id: "20", title: "title" }该写法将外层 Object.keys 映射为列表遍历,内层 reduce 在每个 cards 数组中局部求最大值,并持续传递全局最大值,语义清晰且无副作用。
❌ 不推荐方案:flat() + sort()(低效且有隐患)
尽管写法直观,但存在明显缺陷:
// ❌ 不推荐:创建扁平化大数组 + 全排序 → 时间复杂度 O(n log n),内存浪费 Object.entries(data.lists) .map(([, list]) => list.cards) .flat() .sort((a, b) => b.id - a.id)[0];
- flat() 会一次性合并所有卡片到新数组,空间复杂度 O(N);
- sort() 对全部元素排序仅为了取第一个,属于过度计算;
- 若 cards 为空数组,flat() 后可能返回空数组,导致 [0] 为 undefined,引发运行时错误。
✅ 总结与选型建议
| 方案 | 时间复杂度 | 内存开销 | 可读性 | 推荐场景 |
|---|---|---|---|---|
| 双重 for 循环 | O(N) | O(1) | 中 | 高性能要求、大数据量、生产环境 |
| 嵌套 reduce | O(N) | O(1) | 高 | 中等规模、强调函数式风格、团队偏好简洁逻辑 |
| flat() + sort() | O(N log N) | O(N) | 高 | 小数据量、原型开发、可读性绝对优先 |
无论选择哪种方式,核心原则不变:始终将 id 转为数字比较,遍历全覆盖所有 cards,并妥善处理边界情况(空数组、缺失字段)。在真实项目中,建议封装为可复用工具函数,并添加 TypeScript 类型定义以增强健壮性。

















