遍历哈希数组,为含特定键的哈希值加1的高效可读方法
嘿,这个需求在日常开发里真的挺常见的,我给你分享几个高效又可读性拉满的实现方式,分Ruby和JavaScript两种常用场景来说:
Ruby 实现方案
1. 直接遍历判断(最直观稳妥)
这种写法几乎一看就懂,而且只需要遍历一次数组,效率也在线,还能避免nil + 1的错误:
hash_array.each do |hash| hash['pies'] += 1 if hash.key?('pies') end
要是你的哈希用的是符号键(比如:pies),把'pies'换成:pies就行。
2. 先筛选再操作(精准优化)
如果数组里大部分哈希都没有pies键,先把目标哈希挑出来再统一处理,能减少不必要的判断,性能会更好:
hash_array.select { |h| h.key?('pies') }.each { |h| h['pies'] += 1 }
JavaScript 实现方案
1. forEach 遍历判断(清晰易懂)
和Ruby的思路一致,用hasOwnProperty还能确保只操作哈希自身的键,避免原型链干扰:
hashArray.forEach(hash => { if (hash.hasOwnProperty('pies')) { hash.pies += 1; } });
2. 过滤后批量操作(高效优化)
同样,先过滤出包含pies的哈希再操作,适合数据量大且目标哈希占比小的场景:
hashArray.filter(hash => hash.hasOwnProperty('pies')).forEach(hash => { hash.pies += 1; });
要是你确定不会有原型链属性的干扰,用'pies' in hash代替hasOwnProperty也可以,写法更简洁。
小总结
两种核心思路各有适用场景:
- 若数组中大部分哈希都包含
pies键,直接遍历判断更高效(少一次筛选的额外开销) - 若目标哈希占比低,先筛选再操作能减少无效判断,性能更优
内容的提问来源于stack exchange,提问作者Noel Vock
相关产品推荐
相关产品推荐

