本文介绍一种基于 Array.reduce() 和哈希映射的高效过滤策略:对具有相同 id 的对象,当存在 "HD" 和 "SD" 类型时,自动保留 "HD" 版本,剔除 "SD" 版本,最终返回每个 ID 对应的最优记录。
本文介绍一种基于 `array.reduce()` 和哈希映射的高效过滤策略:对具有相同 `id` 的对象,当存在 `"hd"` 和 `"sd"` 类型时,自动保留 `"hd"` 版本,剔除 `"sd"` 版本,最终返回每个 id 对应的最优记录。
在处理结构化数据(如视频资源列表)时,常遇到同一资源 ID 对应多个质量版本(如 "HD" 和 "SD"),而业务逻辑要求每个 ID 仅保留最高优先级类型(如 "HD")。此时简单去重(如仅按 id 保留首个)不可靠,需引入优先级判断。
推荐使用 Array.prototype.reduce() 构建以 id 为键的对象映射(即哈希表),并在迭代中动态决策是否更新该 id 对应的值:
const arr = [ { id: "123", type: "HD" }, { id: "123", type: "SD" }, { id: "1234", type: "HD" }, { id: "12", type: "SD" }];const filtered = Object.values( arr.reduce((map, item) => { // 若该 id 尚未存在,或已存在但当前不是 "HD",则用当前项覆盖(优先保留 HD) if (!map[item.id] || map[item.id].type !== "HD") { map[item.id] = item; } return map; }, {}));console.log(filtered);// 输出:// [// { id: "123", type: "HD" },// { id: "1234", type: "HD" },// { id: "12", type: "SD" }// ]
✅ 关键逻辑说明:
⚠️ 注意事项:
该方法简洁、可读性强,且易于维护和扩展,适用于各类“按键聚合 + 优先级筛选”场景。
阿里云百炼Token Plan和Coding Plan省钱订阅计划:如何选择?有哪些区别?
最新:阿里云万小智收费价格:活动15元1个月:180元1年:轻量版、标准版及高级版功能支持
移动端的AI助手不应只是客服窗口:更应借助AI能力将小程序服务变成可调用能力
AI搜索引用到客户咨询:中间隔着三层数据漏斗
【码道代码智能体】码道界面焕新:AI 懂需求 开发更顺手
CodexBar:把 AI 编码额度接入 macOS 菜单栏