【发布时间】:2020-12-18 07:38:38
【问题描述】:
我正在尝试将数组中的一些数据放入对象中,其中数据根据它们所属的月份进行分组,以便每个对象都将 JavaScript Date 对象中的月份作为键。
[
{
"date": "2020-08-25T00:00:00.000Z",
"open": "498.7900",
"high": "500.7172",
"low": "492.2100",
"close": "499.3000",
"adjusted close": "499.3000",
"volume": "52873947"
},
{
"date": "2020-08-24T00:00:00.000Z",
"open": "514.7900",
"high": "515.1400",
"low": "495.7450",
"close": "503.4300",
"adjusted close": "503.4300",
"volume": "86484442"
},
...
{
"date": "2020-07-31T00:00:00.000Z",
"open": "411.5350",
"high": "425.6600",
"low": "403.3000",
"close": "425.0400",
"adjusted close": "424.2573",
"volume": "93573867"
},
{
"date": "2020-07-30T00:00:00.000Z",
"open": "376.7500",
"high": "385.1900",
"low": "375.0700",
"close": "384.7600",
"adjusted close": "384.0514",
"volume": "39532505"
},
...
]
预期输出:
{
"2020-08-01T00:00:00.000Z": {
"data": [
{
"date": "2020-08-25T00:00:00.000Z",
"open": "498.7900",
"high": "500.7172",
"low": "492.2100",
"close": "499.3000",
"adjusted close": "499.3000",
"volume": "52873947"
},
{
"date": "2020-08-24T00:00:00.000Z",
"open": "514.7900",
"high": "515.1400",
"low": "495.7450",
"close": "503.4300",
"adjusted close": "503.4300",
"volume": "86484442"
},
...
]
},
"2020-07-01T00:00:00.000Z": {
"data": [
{
"date": "2020-07-31T00:00:00.000Z",
"open": "411.5350",
"high": "425.6600",
"low": "403.3000",
"close": "425.0400",
"adjusted close": "424.2573",
"volume": "93573867"
},
{
"date": "2020-07-30T00:00:00.000Z",
"open": "376.7500",
"high": "385.1900",
"low": "375.0700",
"close": "384.7600",
"adjusted close": "384.0514",
"volume": "39532505"
},
...
]
}
}
到目前为止,这是我使用 lodash 和 moment 尝试过的,但是日期键的格式不正确,我不得不使用附加变量和 for 循环,所以我想知道是否有更好的方法在使用或不使用lodash/moment的情况下保持日期键正确的同时实现这一点?如果有人能帮助我解决这个问题,我将不胜感激,因为我已经坚持了很长一段时间。
let result = _.chain(arr)
.groupBy(arr=>
moment(arr['date'], 'YYYY/MM/DD').startOf(
'month'
)
)
.value()
let finalObj = {};
for (const [key, val] of Object.entries(result)) {
finalObj[key] = { data: val };
}
当前输出 - finalObj:
{
"Sat Aug 01 2020 00:00:00 GMT+0800": {
"data": [
{
"date": "2020-08-25T00:00:00.000Z",
"open": "498.7900",
"high": "500.7172",
"low": "492.2100",
"close": "499.3000",
"adjusted close": "499.3000",
"volume": "52873947"
},
{
"date": "2020-08-24T00:00:00.000Z",
"open": "514.7900",
"high": "515.1400",
"low": "495.7450",
"close": "503.4300",
"adjusted close": "503.4300",
"volume": "86484442"
},
...
]
},
"Wed Jul 01 2020 00:00:00 GMT+0800": {
"data": [
{
"date": "2020-07-31T00:00:00.000Z",
"open": "411.5350",
"high": "425.6600",
"low": "403.3000",
"close": "425.0400",
"adjusted close": "424.2573",
"volume": "93573867"
},
{
"date": "2020-07-30T00:00:00.000Z",
"open": "376.7500",
"high": "385.1900",
"low": "375.0700",
"close": "384.7600",
"adjusted close": "384.0514",
"volume": "39532505"
},
...
]
}
}
【问题讨论】:
标签: javascript date object momentjs lodash