问题描述
我正在使用前端为vue的Rails应用程序。 我有以下数据
records = [["2020-07-01","Jamie",66],["2020-07-01","Rob",12],["2020-08-01",31],["2020-09-01",46],10],["2020-10-01",4]]
我想将此数据整理为
final_result = [{:name=>"Jamie",:data=>[66,31,46,0]},{:name=>"Rob",:data=>[12,10,4]}]
我当时想使用.map之类的records.map之类的东西,但无法弄清楚如何合并数据字段中的值
像final_result中一样,我根据日期:7月,8月,9月,10月将Jamie的值66、31、46、0和Rob的值分别为12、0、10、4。
如果任何月份都不存在该值,则将其设置为0。请帮助我解决此问题。
更新1
下面的数据不适用于答案
records = [
["2020-01-01",nil,0],["2020-02-01",["2020-03-01",["2020-04-01",["2020-05-01",["2020-06-01",2,7,1],29],2]]
关于输出应该是
[{:name=>"Jamie",:data=>[0,66,29]},1,2]}]
但是根据答案
输出为
[{:name=>"Jamie",2]}]
我无法弄清楚为什么显示的是nil值而不是零。
解决方法
records = [["2020-07-01","Jamie",66],["2020-07-01","Rob",12],["2020-08-01",31],["2020-09-01",46],10],["2020-10-01",4]]
months = records.map { |record| Date.parse(record.first,'').month }.uniq.sort
result = []
result_hash = records.inject({}) do |memo,record|
memo[record.second] ||= Array.new(4).map { |_| 0 }
memo[record.second][Date.parse(record.first).month - months.first] = record.last
memo
end
result_hash.each { |key,value| result << { name: key,data: value }}
p result
=>
[{:name=>"Jamie",:data=>[66,31,46,0]},{:name=>"Rob",:data=>[12,10,4]}]