在Rails中使用地图获取空值

时间:2018-07-31 11:05:03

标签: ruby

在地图中使用if条件时,我得到的是空值。我有一个数组,并且遍历了整个数组。

我的第一个数组是:

[
    {
        id: 5,
        Vegetables: "Cabbage",
        Area: 39,
        Production: 695.33,
        Year: 2014,
        created_at: "2018-07-18T06:23:11.000Z",
        updated_at: "2018-07-18T06:23:11.000Z"
    },
    {
        id: 12,
        Vegetables: "Bittergourd",
        Area: 9.71,
        Production: 67.25,
        Year: 2014,
        created_at: "2018-07-18T06:23:11.000Z",
        updated_at: "2018-07-18T06:23:11.000Z"
    },
    # .....
]

这是我的数组,并且我使用以下代码循环:

ji1 = ["Cabbage","Bittergourd"]
hash_data = ji1.map do |col|
  dataset = col.to_s.gsub("_"," ")
  {
    type: views,
    legendText: dataset,
    showInLegend: true,
    dataPoints: b.reject{ |x| x["Districts"] == "Bihar" }.map do |el|
      if el["Vegetables"] == "Bittergourd"
        { y: el["Area"], label: el["Year"] }
      end
    end
  }
end

在这个示例中,b是我的数组,我得到了这个值。我想要这样的结果:

[
  {
    type: "column",
    legendText: "Cabbage",
    showInLegend: true,
    dataPoints: [
      {
        y: 9.7,
        label: 2014
      }
    ]
  },
  {
    type: "column",
    legendText: "Bittergourd",
    showInLegend: true,
    dataPoints: [
      {
        y: 39,
        label: 2014
      }
      # .....
    ]
  }
]

运行循环时,我得到一个null值。有什么办法可以将map与数组一起使用来创建类似上面的结果?

1 个答案:

答案 0 :(得分:0)

作为b所提供的数据,并删除视图,因为我不知道该变量的来源...尝试这段代码。我相信它可以达到您想要做的

    grouped_data = b.group_by{ |data| data[:Vegetables]}

    grouped_data.map{ |vegetable, values| 
        dataset = vegetable.to_s.gsub("_"," ")
        {

          legendText: dataset,
          showInLegend: true,
          dataPoints: values.map { |value|
            { y: value[:Area], label: value[:Year] }
          }
        }
     }

更新

不使用group_by

vegetables_hash = Hash.new
b.each { |data| 
    dataset = data[:Vegetables].to_s.gsub("_"," ")
    vegetables_hash[dataset] ||= { legendtext: dataset, showInLegend: true, dataPoints: []}
    vegetables_hash[dataset][:dataPoints].push({ y: data[:Area], label: data[:Year] })
}

vegetables_hash具有按所需格式按蔬菜分组的数据。 最后一步:

vegetables_hash.values