javascript - 如何迭代列表中的对象和对象中的列表以及列表中的对象
问题描述
var timeslots = [
{
"details": [{
"name":"naveen",
"email":"naveen@gmail.com",
"date":"2019/12/16"
},
{
"name":"naveen",
"email":"naveen@gmail.com",
"date":"2019/12/26"
}],
"time": "10:30 AM",
"status": "Booked"
},
{
"details": [{
"name":"naveen",
"email":"naveen@gmail.com",
"date":"2019/12/26"
},{
"name":"naveen",
"email":"naveen@gmail.com",
"date":"2019/12/26"
}],
"time": "11:30 AM",
"status": "Booked"
},
{
"details": [{
"name":"naveen",
"email":"naveen@gmail.com",
"date":"2019/12/16"
},{
"name":"naveen",
"email":"naveen@gmail.com",
"date":"2019/12/23"
}],
"time": "12:30 PM",
"status": "Booked"
},
{
"details": [{
"name":"naveen",
"email":"naveen@gmail.com",
"date":"2019/12/16"
},{
"name":"naveen",
"email":"navee@gmail.com",
"date":"2019/12/16"
}],
"time": "02:30 PM",
"status": "Booked"
},
{
"details": [{
"name":"naveen",
"email":"naveen@gmail.com",
"date":"2019/12/16"
},{
"name":"naveen",
"email":"naveen@gmail.com",
"date":"2019/12/16"
}],
"time": "03:30 PM",
"status": "Booked"
},
{
"details": [{
"name":"naveen",
"email":"naveeni@gmail.com",
"date":"2019/12/16"
},{
"name":"naveen",
"email":"naveen@gmail.com",
"date":"2019/12/16"
}],
"time": "04:30 PM",
"status": "Booked"
},
{
"details": [{
"name":"naveen",
"email":"naveen@gmail.com",
"date":"2019/12/16"
},{
"name":"naveen",
"email":"naveen@gmail.com",
"date":"2019/12/16"
}],
"time": "05:30 PM",
"status": "Booked"
}
]
我有像 09:00 am --09:00 pm 这样的时间段,根据今天的日期我需要迭代对象列表,我需要分别在 nodejs、javascript 中删除上一个日期对象
所以请帮我解决这个问题
预期产出
var date ="23/12/2019"
var timeslots = [
{
"details": [
{
"name":"naveen",
"email":"naveen@gmail.com",
"date":"2019/12/26"
}],
"time": "10:30 AM",
"status": "Booked"
},
{
"details": [{
"name":"naveen",
"email":"naveeni@gmail.com",
"date":"2019/12/26"
},{
"name":"naveen",
"email":"naveen@gmail.com",
"date":"2019/12/26"
}],
"time": "11:30 AM",
"status": "Booked"
},
{
"details": [{
"name":"naveen",
"email":"naveen@gmail.com",
"date":"2019/12/23"
}],
"time": "12:30 PM",
"status": "Booked"
},
{
"details": [],
"time": "02:30 PM",
"status": "Booked"
},
{
"details": [],
"time": "03:30 PM",
"status": "Booked"
},
{
"details": [],
"time": "04:30 PM",
"status": "Booked"
},
{
"details": [],
"time": "05:30 PM",
"status": "Booked"
}
]
我该如何迭代这个
我有像 09:00 am --09:00 pm 这样的时间段,根据今天的日期我需要迭代对象列表,我需要分别在 nodejs、javascript 中删除上一个日期对象
所以请帮我解决这个问题
从下面的评论
timeslots.time.forEach(function(value) {
console.log(value.time);
value.details.forEach(function(model) {
console.log(value.details);
value.date.forEach(function(date) {
console.log(value.date)
})
});
});
for (var i = 0; i < timeslots.length; i++) {
if (timeslots[i].details[i].date < today) {
list.push(timeslots[i].details[i].date)
}
}
slots.reduceRight(function(acc, obj, idx) {
if (list.indexOf(obj.date) > -1) slots.splice(idx, 1);
}, 0);
解决方案
我查看了您的代码,有几处不正确,可以改进。
var date ="23/12/2019" // string needs to be "2019/12/23" to be parsed by 'Date'
for (var i = 0; i < timeslots.length; i++) { // can be replaced with map
if (timeslots[i].details[i].date < today) { // this is comparing strings, not dates
list.push(timeslots[i].details[i].date) // can be replaced by filter on details
}
}
我已经使用我见过的东西转换了你的代码:
const today = "2019/12/23";
const timeslots = [...]
const answer = timeslots.map(timeSlot => {
return {
...timeSlot, // this is called the spread operator
details: timeSlot.details.filter(detail => {
return new Date(detail.date).getTime() >= new Date(today).getTime()
})
}
})
我们map
到timeslots
一个新对象,使用扩展运算符复制现有的属性。
然后,我们通过在对象声明中使用过滤后的数组版本来覆盖 details 属性。
我们正在根据getTime
解析的日期字符串的结果进行过滤。getTime
返回对象的纪元时间戳Date
。这使我们的比较更容易,因为它们只是数字。
推荐阅读
- linux - 无法运行 docker
- java - Java中的多个同时子字符串替换
- java - Spring Boot Web 应用程序在 Internet 中托管
- ios - React Native Reload Screen A In Back 动作
- android-studio - 任务 ':app:transformDexArchiveWithExternalLibsDexMergerForDebug 执行失败
- c++ - 如何在 qml 应用程序窗口中隐藏最大化和最小化按钮并显示关闭按钮?
- f# - 如何从记录类型中调用字段?
- algorithm - 从最大堆中删除叶节点的时间复杂度?
- powershell - 指定的提供程序类型无效。加密异常
- node.js - 在续集的.sum() 中得到范围错误?