javascript - JS中重构对象的最佳方式
问题描述
我有对象数组、宽度日期和时间属性,如下所示。我尝试按天和时间重组元素。
[
{
data: 'data1',
date: '15-02-2020 06:00:00'
},
{
data: 'data2',
date: '15-02-2020 12:00:00'
},
...
{
data: 'data6',
date: '17-02-2020 07:00:00'
},
{
data: 'data7',
date: '17-02-2020 09:00:00'
}
]
我想得到这个:
{
'15-02-2020' : {
'06:00:00' : 'data1',
'12:00:00' : 'data2'
},
'16-02-2020' : {
'06:00:00' : 'data3',
'12:00:00' : 'data4'
},
'17-02-2020' : {
'01:00:00' : 'data5',
'07:00:00' : 'data6',
'09:00:00' : 'data7'
}
}
我试过使用reduce
,但不能。我想这样做,在一个循环中没有临时变量。
list.reduce((obj, item) => Object.assign(obj, {[item.date]: item}), {});
解决方案
只需遍历您的数组并动态构建结果对象:
const arr = [
{
data: 'data1',
date: '15-02-2020 06:00:00'
},
{
data: 'data2',
date: '15-02-2020 12:00:00'
},
{
data: 'data6',
date: '17-02-2020 07:00:00'
},
{
data: 'data7',
date: '17-02-2020 09:00:00'
}
]
const res = {}
arr.forEach(item => {
const dateArr = item.date.split(' ')
if (res[dateArr[0]]) {
res[dateArr[0]][dateArr[1]] = item.data
} else {
res[dateArr[0]] = {}
res[dateArr[0]][dateArr[1]] = item.data
}
})
console.log(res)
推荐阅读
- c# - 单击时显示面板
- html - 任意级别的嵌套 flex 子级的大小相等
- c# - 为 WebView2 设置缓存目录
- python - 更改线图 pandas/matplotlib 中特定线的线宽
- python - 如果将数字转换为字符串,则使用 find_one 时 Pymongo 不返回值
- r - 仅保留数据框中的某些列,前提是它们符合条件
- java - Thymeleaf 控制器不渲染
- node.js - React Create-react-app 问题,卡在我的一台电脑上安装并在另一台电脑上顺利运行
- python - plotly 中的保留热图
- java - 如何在 Intellij 中使用 bean 创建基本的 Spring 应用程序