首页 > 解决方案 > 如何迭代列表中的对象和对象中的列表以及列表中的对象

问题描述

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);

标签: javascriptnode.js

解决方案


我查看了您的代码,有几处不正确,可以改进。

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()
        })
    }
})

我们maptimeslots一个新对象,使用扩展运算符复制现有的属性。

然后,我们通过在对象声明中使用过滤后的数组版本来覆盖 details 属性。

我们正在根据getTime解析的日期字符串的结果进行过滤。getTime返回对象的纪元时间戳Date。这使我们的比较更容易,因为它们只是数字。


推荐阅读