ruby-on-rails - 根据日期字段组织数组
问题描述
我正在开发一个前端带有 vue 的 Rails 应用程序。我有以下数据如下
records = [["2020-07-01", "Jamie", 66],
["2020-07-01", "Rob", 12],
["2020-08-01", "Jamie", 31],
["2020-09-01", "Jamie", 46],
["2020-09-01", "Rob", 10],
["2020-10-01", "Rob", 4]]
我想将这些数据组织为
final_result = [{:name=>"Jamie", :data=>[66, 31, 46, 0]},
{:name=>"Rob", :data=>[12, 0, 10, 4]}]
我正在考虑使用 .map 之类的 records.map 但我无法弄清楚如何组合数据字段中的值
就像在 final_result 中一样,我根据以下日期将 Jamie 的值 66、31、46、0 和 Rob 的值 12、0、10、4 组合起来:7 月、8 月、9 月、10 月。
如果该值在任何月份都不存在,则将其设置为 0。请帮助我解决此问题。
更新 1
答案不适用于以下数据集
records = [
["2020-01-01", nil, nil, 0],
["2020-02-01", nil, nil, 0],
["2020-03-01", nil, nil, 0],
["2020-04-01", nil, nil, 0],
["2020-05-01", nil, nil, 0],
["2020-06-01", nil, nil, 0],
["2020-07-01", 2, "Jamie", 66],
["2020-07-01", 7, "Rob", 1],
["2020-08-01", 2, "Jamie", 29],
["2020-08-01", 7, "Rob", 2]]
在关于输出的情况下应该是
[{:name=>"Jamie", :data=>[0, 0, 0, 0, 0, 0, 66, 29]},
{:name=>"Rob", :data=>[0, 0, 0, 0, 0, 0, 1, 2]}]
但根据答案
输出是
[{:name=>"Jamie", :data=>[0, 0, 0, 0, nil, nil, 66, 29]},
{:name=>"Rob", :data=>[0, 0, 0, 0, nil, nil, 1, 2]}]
我无法弄清楚为什么它显示零值而不是零。
解决方案
records = [["2020-07-01", "Jamie", 66],
["2020-07-01", "Rob", 12],
["2020-08-01", "Jamie", 31],
["2020-09-01", "Jamie", 46],
["2020-09-01", "Rob", 10],
["2020-10-01", "Rob", 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, 0, 10, 4]}]
推荐阅读
- oracle - ORA-00909 在对象表中插入对象时出错
- json - 如何在 Mule 3 中迭代 JSON 数组
- javascript - 比较三个日期以获取 MongoDB 中的最新信息
- eiffel - Eiffel EWF 应用程序独立 C 绑定错误
- javascript - Bootstrap carousel - 加载活动图像时加载动画
- java - 对 Nominatum 的 REST API 调用在 Linux 上获得 HTTP 200,但在 Windows 上获得 HTTP 400
- html - DataTables 正在使用 Bootstrap 3.3.7 应用程序中的 ajax 源数据更改列的宽度
- python - 迁移错误__fake__.Does Not Exist:标签匹配查询不存在
- python - 一个类应该具有多个属性或一个属性作为具有许多键的字典,Python3
- rust - 是手动丢弃
> 使用 mem::uninitialized 定义的行为?