价格计数功能实现:选对象数组还是普通对象更合适?
选型结论
针对你需要统计各价格点对应选项数量、支持新增选项时计数自增、最终渲染「价格(X options)」格式的需求,选第二种键值对结构(价格做键、计数做值的对象/Map),不要选第一种数组结构。
原因说明
- 数组方案的问题
每次更新计数都得先遍历整个数组,找到对应价格的条目才能改值,时间复杂度是O(n),价格档位多、更新频繁的时候性能很差。除此之外你还要额外判断「当前价格是不是第一次出现」,找不到对应条目还得手动往数组里加新元素,写起来麻烦还容易出bug。 - 键值对方案的优势
不需要遍历,不管是查计数还是更新计数都是O(1)的操作,新增选项的时候直接一行代码就能搞定自增:
最后要渲染展示内容的时候,直接遍历所有键值对,把价格和对应的计数拼到模板字符串里就行,完全满足你的展示要求。// 普通对象实现 priceCount[price] = (priceCount[price] || 0) + 1 // Map实现(更推荐,支持严格键类型、保序) priceCount.set(price, (priceCount.get(price) || 0) + 1)
小建议
如果你的业务里价格可能有特殊格式、或者需要严格按照价格首次出现的顺序渲染,直接用Map就好,不用纠结普通对象。普通对象会自动把数字键转成字符串,大部分常规价格场景下没影响,但Map的语义更适合做这种频次统计的场景。
内容的提问来源于stack exchange,提问作者Fred K
相关产品推荐
相关产品推荐

