Tengo un componente de tarjeta de lista que muestra los dispositivos en una lista con su nombre, marca, imagen, reservado hasta (durante cuánto tiempo está reservado si está reservado). Toda esta información proviene de un archivo Json. Tengo dos preguntas:
Componente ListCard:
const ReservationsListCard = ({ device: { id, name, brand, bookedUntil, quantity, image }, liked = false, }) => { let stateIcon; let stateText; var min = null; let dateArray = []; if (!bookedUntil) { stateIcon = <AvailableItemIcon />; stateText = "Available"; } else { stateIcon = <BookedItemIcon />; stateText = "Booked until"; dateArray = bookedUntil; for (var i = 0; i < dateArray.length; i++) { var current = dateArray[i]; if (min != null || current.date < min.date) { min = current; } } } return ( <a href={"/device/" + id} className="reservations-list-card"> <img className="reservations-list-card__image" alt="device" src={image} /> <div className="reservations-list-card__brand ">{brand}</div> <div className="reservations-list-card__name">{name}</div> <div className="reservations-list-card__availability"> {stateIcon} {stateText} {console.log(min.date)} </div> <div className="reservations-list-card__quantity"> QUANTITY: {quantity} </div> </a> ); }; ReservationsListCard.propTypes = { device: PropTypes.object, }; export default ReservationsListCard;La condición if (!bookedUntil) nunca se ejecutará y siempre irá al bloque else . Las matrices vacías también son "verdaderas".
Cuando la matriz bookedUntil está vacía y asigna su primer valor a current , obtiene undefined . Más tarde, al verificar current.date , básicamente verifica undefined.date que arroja un error.
Necesita verificar la longitud de la matriz:
if (!bookedUntil.length) { // ... rest of the code }