首页 > 解决方案 > Ruby if inside map 传递哈希

问题描述

我有一种方法可以遍历哈希,.map以创建另一个哈希作为结果。

def assigned_task_list
  assigned_tasks.map do |issue|
    {
      key: issue.key,
      desired_time_to_resolution: issue.customfield_14777.dig('ongoingCycle', 'remainingTime', 'friendly'),
      time_to_resolution: issue.customfield_10031.dig('ongoingCycle', 'remainingTime', 'friendly'),
      name: issue.name
    }
  end
end

如何将 if 块放入此哈希中以决定放在那里desired_time_to_resolution:time_to_resolution

我的意思是如果像这样阻止:

if issue.customfield_14777.nil?
  desired_time_to_resolution: issue.customfield_14777.dig('ongoingCycle', 'remainingTime', 'friendly')
else
  time_to_resolution: issue.customfield_10031.dig('ongoingCycle', 'remainingTime', 'friendly')
end

标签: ruby

解决方案


您不能在哈希执行此操作,但您可以使用它Hash#merge来更新哈希。

def assigned_task_list
  assigned_tasks.map do |issue|
    {
      key: issue.key,
      name: issue.name
    }.merge(
      if issue.customfield_14777.present?
        {desired_time_to_resolution: ...}
      else
        {time_to_resolution: ...}
      end
    )
  end
end

推荐阅读