You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React.js中实现预订记录按日期及小时排序的问题求助

解决方案

你当前代码直接遍历原始bookings数组,没有做排序处理,所以默认按数组原始存储顺序(即创建顺序)渲染,需要在遍历前对数组按日期时间规则排序即可。
注意排序前先对原数组做浅拷贝,不要直接修改原数组避免产生不必要的副作用,排序逻辑可参考以下代码:

// 浅拷贝原数组后升序排序:年>月>日>时>分
const sortedBookings = [...bookings].sort((a, b) => {
  if (a.year !== b.year) return a.year - b.year
  if (a.month !== b.month) return a.month - b.month
  if (a.day !== b.day) return a.day - b.day
  if (a.hour !== b.hour) return a.hour - b.hour
  return a.minutes - b.minutes
})

注意事项

排序后数组的索引和原始数组顺序不一致,你原有代码中deleteBooking方法是传入索引删除数据,会出现删除错误的问题,建议修改为通过booking.id匹配删除数据,对应渲染代码调整如下:

<Card className="my-4 booking-profile">
  <Card.Body>
    <Card.Title>
      {sortedBookings.map((booking) => {
        console.log(booking.id);
        return (
          <ul key={booking.id}>
            <li>
              <span>
                {" "}
                Tu reserva: {booking.day}/{booking.month}/{booking.year} a las{" "}
                {booking.hour}:{booking.minutes}
              </span>
              <i
                onClick={() => {
                  deleteBooking(booking.id);
                }}
                className="fas fa-trash-alt delete"
              ></i>
            </li>
          </ul>
        );
      })}
    </Card.Title>
  </Card.Body>
</Card>

如果需要实现降序排序,把排序逻辑中return语句前后的两个变量调换即可,比如return b.year - a.year。

内容的提问来源于stack exchange,提问作者Almudena Xico

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 22:09:01