在地图中使用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
与数组一起使用来创建类似上面的结果?
答案 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