根据日期字段组织数组

问题描述

我正在使用前端为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]}]

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...