javascript - 如何拒绝数组中的元素?

标签 javascript ruby-on-rails ruby ruby-on-rails-3 highcharts

我正在将 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]]
    }
});

http://www.highcharts.com/demo/spline-irregular-time

关于javascript - 如何拒绝数组中的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8645273/

相关文章:

ruby-on-rails - 配置 rspec-rails 生成器

ruby-on-rails - 升级到 Ruby 2.6.5 后 Heroku 部署失败

ruby-on-rails - 如何通过提取另一个模型的名称来确定模型?

ruby-on-rails - Rails 根据另一个属性的值验证模型属性

ruby - 使用 Rails 3.2 中的 AJAX 预填充值呈现复杂的嵌套表单

ruby-on-rails - 由于 unicorn ,bundle exec rails s 失败

javascript - IE 中的事件传播

javascript - 用于替换中间字母的正则表达式

javascript - Angular 4+ 应用程序在移动设备上渲染缓慢

javascript - 在文件上传时隐藏 span 元素