我正在将 Highcharts 整合到我的 Rails 3/Ruby 1.8.7 项目中,使用 Railscast 第 223 集作为起点。
我正在尝试绘制用户过去四个星期的体重图表。有些日子用户可能不会输入他们的体重,我希望图表跳过这些日期。
我尝试使用这个 Stackoverflow 问题的答案:
Highcharts - Rails array includes empty date entries
但我遇到了 OP 提到的同样的麻烦,因为权重值被分配给没有条目的日期。简而言之,一个没有权重的日期仍然被分配给找到下一个权重值的数组。
这是我的图表系列选项的代码:
series: [{
name: "Daily Weight",
pointInterval: <%= 1.day * 1000 %>,
pointStart: <%= 4.weeks.ago.to_i * 1000 %>,
data: <%= (4.weeks.ago.to_date..Date.today).map { |date| Weight.weight_on(date, current_user.id).to_f}.reject(&:zero?).inspect %>
}]
这是权重模型中的 weight_on 函数:
def self.weight_on(date, user_id)
weight = Weight.find_by_entry_date_and_user_id(date, user_id)
unless weight.nil?
return weight.weight_entry
end
end
看起来正在发生的事情是在构建日期/权重数组时,日期一直保留到返回权重值为止。然后将日期和权重(与数组中的日期不对应)添加到数组,然后迭代到下一个日期。
我如何拒绝日期?如果没有找到该日期的权重值,我该如何跳过该日期,确保它不会被添加到数组中,并转到下一个日期?
感谢您的帮助!
最佳答案
我会使用不规则的时间间隔来重构代码,而不是期望用户每天都填写值。
生成一对日期时间(以毫秒为单位)和值,即每个点都有一个 x 和 y 值的数组。
new Highcharts.Chart({
chart: {
renderTo: 'container',
type: 'line'
},
xAxis: {
type: 'datetime',
maxZoom: 7 * 24 * 3600000, // one week
},
series: [
{
name: "Weight",
data: [[1295954580000,3.9],[1297411200000,6.6],1298366040000,5.5],1318931520000,7.7],[1320143220000,2.2],[1320846960000,5.6],[1321356600000,2.1]]
}
});
关于javascript - 如何拒绝数组中的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8645273/