javascript - 在 javascript 地图中创建复合对象
问题描述
试图在地图中创建一个复合对象但卡在一个点上。映射具有开始和结束时间以及一些事件的数组。下面是代码。
let detailsRes = Object.create({});
response.map((res, i) => {
let start = new Date(moment(res.startTime).format('L'));
let end = new Date(moment(res.endTime).format('L'));
let current = new Date(start);
while (current <= end) {
date = [new Date(current).getFullYear(), new Date(current).getMonth() + 1, new Date(current).getDate()].join('-');
detailsRes[date] == undefined ? (detailsRes[date] = 1) : (detailsRes[date] += 1);
var newDate = current.setDate(current.getDate() + 1);
current = new Date(newDate);
}
});
样本数据
[{
"endTime": "2020-12-06 16:30:00.000Z",
"event": "Study",
"startTime": "2020-12-06 12:30:00.000Z",
'somedata':'js is good'
},
{
"endTime": "2020-12-06 16:30:00.000Z",
"event": "gym",
"startTime": "2020-12-05 12:30:00.000Z",
'somedata':'js is good'
},
]
电流输出
{5-12-2020 : 1, 6-12-2020 : 2 },
预期产出
5-12-2020 : {
totalcount: 1, // 5 is only 1 time
event1: 1 //gym
},
6-12-2020 : {
totalcount:2, // 2 times 6-12 is there so count is 2
event1: 1, //gym
event2: 1 // study
}
所以基本上检查日期之间发生了多少事件,如果事件在 1-12 到 3-12 之间,那么每个日期的单个对象为 1,2,3 和总数为 1,如果中间有任何其他事件,则增加该特定事件总数。上面给出的我的输出是正确的,但试图修改像预期输出一样的对象。所以我需要这种对象。
解决方案
您的要求并不完全清楚,但可以肯定的是您不应该reduce
为此map
使用。
使结果成为对象很容易,见下文,但我仍然不完全清楚如何eventN
正确构建密钥。这当然适用于您在此处介绍的测试用例,如果它不适用于您想要澄清的内容,我会根据需要进行更新。
var response = [{
"endTime": "2020-12-06 16:30:00.000Z",
"event": "Study",
"startTime": "2020-12-06 12:30:00.000Z",
'somedata':'js is good'
},
{
"endTime": "2020-12-06 16:30:00.000Z",
"event": "gym",
"startTime": "2020-12-05 12:30:00.000Z",
'somedata':'js is good'
},
]
let detailsRes = response.reduce((acc, res) => {
let start = new Date(moment(res.startTime).format('L'));
let end = new Date(moment(res.endTime).format('L'));
let current = new Date(start);
var n = 0;
while (current <= end) {
date = [new Date(current).getFullYear(), new Date(current).getMonth() + 1, new Date(current).getDate()].join('-');
if(acc[date] == undefined) acc[date] = {totalcount:0}
acc[date].totalcount++;
acc[date]["event" + ++n] = 1;
var newDate = current.setDate(current.getDate() + 1);
current = new Date(newDate);
}
return acc
}, {});
console.log(detailsRes)
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>
推荐阅读
- javascript - 迭代特定的嵌套对象属性并推送到数组
- javascript - 使用hammerjs和threejs的奇怪旋转行为
- linux - Linux 上字符设备的符号链接,模仿常规文件
- python - 从数据框创建箱线图而不合并为一个
- ios - 如何从 UINavigationBar *with* UISearchController 中删除 1px 底部边框?
- c# - 在新选项卡中打开 URL 字符串以单击它加载的图像,无法读取 URL 字符串
- python - Pandas DataFrame - 规范化
- react-native - 使用 Detox 测试 Switch 组件 - 点击会影响之前的 toHaveValue() 测试
- python - 如何将参数传递给 Pytest 中的 Selenium 测试函数?
- svn - 如何在 tgz 文件中添加修订号 svn?