javascript - 如何将具有日期的对象拆分为另一个对象,按年和月分隔?
问题描述
我试图按年和月将javascript中的一个对象集合拆分为不同的对象。
有人可以指出如何处理此类问题的正确方向吗?
我从 api 获得的数据:
(7) [{…}, {…}, {…}, {…}, {…}, {…}, {…}]
0:
ano: "2020"
comprovante: "https://firebasestorage.googleapis.com/v0/b/dspsas-d0668.appspot.com/o/Storage%2FUser%2FbkrxhlxOCtY3kHUHlW9lnStIVlG2%2FComprovantes%2FxToy7.png?alt=media&token=d2184d68-f094-4c68-8a04-8c5e8e864559"
created_at: FirestoreTimestamp {_seconds: 1598723129, _nanoseconds: 75000000}
dataLancamento: FirestoreTimestamp {_seconds: 1598670000, _nanoseconds: 0}
dateArray: (3) ["29", "08", "2020"]
descricao: "lançamento"
dia: "29"
id: "3HCE8VxzBlV7GKsu89Ti"
mes: "08"
tags: (3) ["Tag", "teste", "Música"]
tipoLancamento: "Despesa"
user_id: "bkrxhlxOCtY3kHUHlW9lnStIVlG2"
valor: 1
__proto__: Object
1:
ano: "2020"
comprovante: null
created_at: FirestoreTimestamp {_seconds: 1598809946, _nanoseconds: 737000000}
dataLancamento: FirestoreTimestamp {_seconds: 1588302000, _nanoseconds: 0}
dateArray: (3) ["01", "05", "2020"]
descricao: "Teste"
dia: "01"
id: "EBHCwuc4w7Yum5H20C6u"
mes: "05"
tags: false
tipoLancamento: "Despesa"
user_id: "bkrxhlxOCtY3kHUHlW9lnStIVlG2"
valor: 5
__proto__: Object
2: {comprovante: null, valor: 1, created_at: FirestoreTimestamp, dataLancamento: FirestoreTimestamp, tipoLancamento: "Entrada", …}
我想要这样的东西:
object:
{
0: {
year: 2019,
months: {
0: {...obj}
1: {...obj}
2: {
month: 'mar',
items: {
0: {...item},
1: {...item},
}
}
}
}
}
解决方案
NB 来自移动设备的日志记录,因此格式和语法可能有点不正确。此外,您似乎对 js 对象和数组不熟悉,因此请保持简单,以便您了解正在发生的事情。
const yourArray = [
{ ...dateArray: [...]},
{ ...dateArray: [...]},
{ ...dateArray: [...]}
];
var monthNames = [‘January’...];
function groupBy(objectArray, property) {
return objectArray.reduce((acc, obj) => {
const year = obj[property][2];
if (!acc[year]) {
acc[year] = [];
}
var month = monthNames[obj[property][1]];
if(!acc[year][month]){
acc[year][month] = [];
}
// Add object to list for given key's value
acc[year][month].push(obj);
return acc;
}, {});
}
const grouped = groupBy(yourArray, 'dateArray');
console.log(grouped);
推荐阅读
- postgresql - 从表中的列中选择特定数字到另一个表中
- html - 为什么 text-align 属性在按钮元素中不起作用?
- r - shinydashboard:为 data.table 中的每个观察结果创建一个超链接,在单击它后进行 API 调用
- django - 如何将现有的 django 数据库用于另一个项目
- nginx - nginx:提供不同反向代理应用程序的静态文件
- sql-server - 如何在 vb.net 睡眠期间在后台运行 .Gif 图像
- php - 根据值跳过导入行
- javascript - 基于for循环添加div类
- php - 测试数据库中是否存在数字,如果存在则创建新的
- powershell - 用于 PowerShell 功能的自定义 -PassThru 开关