首页 > 解决方案 > 从 json 中获取数字最小的 .each 循环结果

问题描述

我有一个来自运输 API 的 API 响应,我想默认自动选择最低运费。

这是json:

[
  {"serviceName"=>"USPS First Class Mail - Letter", "serviceCode"=>"usps_first_class_mail", "shipmentCost"=>0.8, "otherCost"=>0.0},
  {"serviceName"=>"USPS First Class Mail - Large Envelope or Flat", "serviceCode"=>"usps_first_class_mail", "shipmentCost"=>1.3, "otherCost"=>0.0},
  {"serviceName"=>"USPS First Class Mail - Package", "serviceCode"=>"usps_first_class_mail", "shipmentCost"=>2.84, "otherCost"=>0.0},
  {"serviceName"=>"USPS Priority Mail - Package", "serviceCode"=>"usps_priority_mail", "shipmentCost"=>7.82, "otherCost"=>0.0},
  {"serviceName"=>"USPS Priority Mail - Medium Flat Rate Box", "serviceCode"=>"usps_priority_mail", "shipmentCost"=>12.8, "otherCost"=>0.0},
  {"serviceName"=>"USPS Priority Mail - Small Flat Rate Box", "serviceCode"=>"usps_priority_mail", "shipmentCost"=>7.5, "otherCost"=>0.0},
  {"serviceName"=>"USPS Priority Mail - Large Flat Rate Box", "serviceCode"=>"usps_priority_mail", "shipmentCost"=>17.6, "otherCost"=>0.0},
  {"serviceName"=>"USPS Priority Mail - Flat Rate Envelope", "serviceCode"=>"usps_priority_mail", "shipmentCost"=>6.95, "otherCost"=>0.0},
  {"serviceName"=>"USPS Priority Mail - Flat Rate Padded Envelope", "serviceCode"=>"usps_priority_mail", "shipmentCost"=>7.55, "otherCost"=>0.0},
  {"serviceName"=>"USPS Priority Mail - Regional Rate Box A", "serviceCode"=>"usps_priority_mail", "shipmentCost"=>9.95, "otherCost"=>0.0},
  {"serviceName"=>"USPS Priority Mail - Regional Rate Box B", "serviceCode"=>"usps_priority_mail", "shipmentCost"=>16.1, "otherCost"=>0.0},
  {"serviceName"=>"USPS Priority Mail - Legal Flat Rate Envelope", "serviceCode"=>"usps_priority_mail", "shipmentCost"=>7.25, "otherCost"=>0.0}
] 

然后我想定义最低价格的,然后传递给支付处理器。

我尝试使用 <%= rate["shipmentCost"].min %>但得到了undefined methodmin' for 0.8:Float`... 从 json 响应来看,哪个 0.8 是最低的选项。

我怎样才能让每个循环或一般的循环找出最低的`rate [“shipmentCost”],然后定义它,以便我可以使用它来增加商品的价格。

例如,我想做类似的事情:

rate_to_use = rate["shipmentCost"].min 然后使用“price + rate_to_use = total”处理付款。然后稍后将使用相同的最低费率创建标签或与之匹配以进行运输。

标签: ruby-on-railsruby

解决方案


您可以使用Enumerable#min_by

cheapest = @shipping_rates.min_by{|rate| rate['shipmentCost'] }

推荐阅读