遍历嵌套交易历史哈希时优先指定键,固定登录用户版本展示位置
解决嵌套哈希遍历中优先显示指定用户交易版本的问题
听起来你需要在遍历交易历史哈希时,固定把当前登录用户的版本放在左侧,另一方放在右侧,不管原始哈希里user_id的存储顺序对吧?这里有个简单直接的实现思路,我用Ruby代码来给你演示(看你的哈希格式应该是Ruby环境):
首先,假设你已经拿到了当前登录用户的ID,比如current_user_id = "97"(实际项目里你可以从会话或者当前用户对象里取)。然后我们可以对每个日期下的用户哈希做处理:
# 假设当前登录用户ID current_user_id = "97" history_hash = { "2018-03-22" => { "97" => { "id" => "2", "Offer" => "X Y, but no Z", "key" => "AZ81N3" }, "242" => { "id" => "1", "Offer" => "X Y Z", "key" => "AZ81N3" } }, "2018-03-15" => { "242" => { "id" => "1", "Offer" => "X Y Z", "key" => "AZ81N3" }, "97" => { "id" => "2", "Offer" => "nil", "key" => "AZ81N3" } } } # 遍历每个日期的交易记录 history_hash.each do |date, user_trades| # 优先获取当前用户的交易版本 current_user_trade = user_trades[current_user_id] # 找到另一方的交易版本(过滤掉当前用户ID) other_user_trade = user_trades.values.find { |trade| trade["key"] == current_user_trade["key"] && trade["id"] != current_user_trade["id"] } # 现在就可以固定顺序渲染了:左侧current_user_trade,右侧other_user_trade puts "日期: #{date}" puts "左侧(当前用户): #{current_user_trade}" puts "右侧(对方): #{other_user_trade}" puts "---" end
关键思路解释:
- 直接通过
user_trades[current_user_id]精准获取当前用户的交易版本,不管它在哈希里的顺序 - 利用交易的共同
key和不同的id来定位另一方的交易版本(因为双方的交易共享同一个key,但id不同) - 这样处理后,不管原始哈希里user_id的顺序如何,你都能保证当前用户的版本始终在左侧,另一方在右侧
如果你的场景里,每个日期下肯定只有两个用户的交易记录,还可以简化一下找另一方的逻辑:
other_user_trade = user_trades.except(current_user_id).values.first
这个方法更高效,直接排除当前用户ID后取剩下的那个值就行,前提是每个日期下确实只有两个用户的交易。
另外,如果你是在视图层(比如Rails的ERB模板)里渲染,也可以用同样的逻辑来组织显示顺序,确保布局的一致性。
内容的提问来源于stack exchange,提问作者michjo
相关产品推荐
相关产品推荐

