Javascript 如何从查询中构建二维数组?
我在Rails中有一个查询,它提取了3个数据点:data1、data2和datetime。我需要将它们组合成两个不同的2D数组,以便插入到图形(Highcharts)中,例如: 您可以看到,这些数据最终将在js中使用,如:Javascript 如何从查询中构建二维数组?,javascript,ruby-on-rails,ruby,ruby-on-rails-3,highcharts,Javascript,Ruby On Rails,Ruby,Ruby On Rails 3,Highcharts,我在Rails中有一个查询,它提取了3个数据点:data1、data2和datetime。我需要将它们组合成两个不同的2D数组,以便插入到图形(Highcharts)中,例如: 您可以看到,这些数据最终将在js中使用,如: series: [{ data: [[6, 540], [7, 540], [7, 1620], [8, 1620]] },{ data: [[6, 340], [7, 340], [7, 620], [8, 620]] }] 通过使用它是非常直接的,但是我
series: [{
data: [[6, 540], [7, 540], [7, 1620], [8, 1620]]
},{
data: [[6, 340], [7, 340], [7, 620], [8, 620]]
}]
通过使用它是非常直接的,但是我只需要为输出适当地组合数组。我的想法是这样的,但我需要一些帮助来正确构建二维阵列以进行插入:
readings = ModelName.order("date DESC").select('table_name.data1, table_name.data2, table_name.date').limit(1000).all
# HELP HERE, Need 2D arrays here...
data2_and_time_array = Array.new
data1_and_time_array = Array.new
readings.each do |row|
# HELP HERE, build place datetime into each for X axis
data1_and_time_array.push row[:date]
data2_and_time_array.push row[:date]
# These are the Y data points in each series
data1_and_time_array.push row[:data2].to_f
data2_and_time_array.push row[:data1].to_f
end
f.series(
:name => 'Data1',
# Date is X & must be first in each 2D array, I believe
# in format of: [[X1, Y1], [X2, Y2], ... [Xn, Yn]]
:data => data1_and_time_array
)
f.series(
:name => 'Data2',
:data => data2_and_time_array
)
如果您能在上面的示例代码中提供适当的修复程序/逻辑来正确执行此操作,我将不胜感激。我不太清楚您想要什么,但应该做到以下几点:
data2_and_time_array = readings.map{|row| [row.date, row.data1.to_f] }
data1_and_time_array = readings.map{|row| [row.date, row.data2.to_f] }
编辑:
您可以在块内执行所需的任何处理:
data2_and_time_array = readings.map do{|row| [row.date, row.data1 == -1 ? row.data1.to_f : nil] }
在执行复杂处理时,建议使用do…end
块语法以获得更可读的代码:
data2_and_time_array = readings.map do |row|
date, data = row.date, row.data1
data = (data == -1) ? nil : data.to_f
[date, data]
end
输入数据中的详细信息太多。只需给出一个示例输入(Ruby对象),而无需进一步的ado,以及您想要的输出(您已经这样做了)。此外,如果某个值
row.data1==-1
,那么它应该将一个nil推到堆栈上,您能在使用的较短块中也这样做吗?我假设此时它将移动到一个多行do块中。最后使用了一个变量:data1_和_date_数组=reads.map{row |[row.date,(row.short.to_f if BigDecimal(row.data1)!=BigDecimal(-100.0”)}