#javascript #arrays #function
Вопрос:
Я использую React для своего приложения. Я пытаюсь сделать одно приложение для доставки еды. В моем приложении есть несколько ресторанов. В некоторых ресторанах есть время доставки, а в некоторых его нет. У всех ресторанов есть дата на ближайшие 7 дней.
У некоторых ресторанов нет времени доставки в течение первых двух дней, но после этого у ресторана есть время доставки в течение остальной части недели. У некоторых ресторанов вообще нет времени доставки в течение следующих семи дней.
Я хочу создать вспомогательную функцию, которая проверит, есть ли в данных ресторана время доставки или нет.
PS: Я пытаюсь научиться МОДУЛЬНОМУ тестированию. Было бы здорово, если бы вы показали мне, как выполнить модульное тестирование моей вспомогательной функции.
Это мои примерные данные, в которых указаны даты и время доставки:
{
deliveryMethod: "PICKUP",
deliverySlots: [
{
date: "2021-08-04",
deliveryTimes: [],
},
{
date: "2021-08-05",
deliveryTimes: [],
},
{
date: "2021-08-06",
deliveryTimes: [],
},
{
date: "2021-08-07",
deliveryTimes: [
{
time: "16:30-17:00",
validFrom: "2020-08-07",
validUntil: "2023-08-07",
},
{
time: "18:00-19:00",
validFrom: "2020-08-07",
validUntil: "2023-08-07",
},
],
},
],
}
Это мои примерные данные, в которых есть даты и нет времени доставки:
{
deliveryMethod: "PICKUP",
deliverySlots: [
{
date: "2021-08-04",
deliveryTimes: [],
},
{
date: "2021-08-05",
deliveryTimes: [],
},
{
date: "2021-08-06",
deliveryTimes: [],
},
{
date: "2021-08-07",
deliveryTimes: [],
},
],
}
После передачи значения в функцию я застрял, как проверить, существуют ли какие-либо сроки доставки или нет.
const deliveryArea = {
deliveryMethod: "PICKUP",
deliverySlots: [
{
date: "2021-08-04",
deliveryTimes: [],
},
{
date: "2021-08-05",
deliveryTimes: [],
},
{
date: "2021-08-06",
deliveryTimes: [],
},
{
date: "2021-08-07",
deliveryTimes: [
{
time: "16:30-17:00",
validFrom: "2020-08-07",
validUntil: "2023-08-07",
},
{
time: "18:00-19:00",
validFrom: "2020-08-07",
validUntil: "2023-08-07",
},
],
},
{
date: "2021-08-08",
deliveryTimes: [
{
time: "16:30-17:00",
validFrom: "2020-08-08",
validUntil: "2023-08-08",
},
{
time: "18:00-19:00",
validFrom: "2020-08-07",
validUntil: "2023-08-07",
},
],
},
{
date: "2021-08-09",
deliveryTimes: [],
},
{
date: "2021-08-10",
deliveryTimes: [
{
time: "16:30-17:00",
validFrom: "2020-08-10",
validUntil: "2023-08-10",
},
{
time: "18:00-19:00",
validFrom: "2020-08-10",
validUntil: "2023-08-10",
},
],
},
],
};
const helperFunction = (deliveryArea) => {
console.log(deliveryArea); // in here i stuck
};
helperFunction(deliveryArea);
Комментарии:
1. Что касается вашего «PS»: Это немного больше, чем просьба. Переполнение стека здесь, чтобы помочь с конкретными проблемами, с которыми вы можете столкнуться, но я не думаю, что кто-то захочет предоставить здесь полный учебник. (Кроме того, запрос должен охватывать только одну конкретную проблему) Выберите структуру модульного тестирования, и должна быть документация и дополнительные онлайн-материалы о том, как с ней работать. Затем, чтобы проверить эту конкретную функцию, просто приведите два примера объектов, как в этом вопросе, и убедитесь, что функция возвращает true или false, как и ожидалось.
Ответ №1:
Вы можете использовать Array.prototype.some()
для того, чтобы проверить, существует ли по крайней мере один слот, где deliverytimes
не пусто:
const deliveryArea = { deliveryMethod: "PICKUP", deliverySlots: [{date: "2021-08-04", deliveryTimes: [],},{date: "2021-08-05", deliveryTimes: [],},{date: "2021-08-06", deliveryTimes: [],},{date: "2021-08-07", deliveryTimes: [{startTime: 600,time: "16:30-17:00", validFrom: "2020-08-07", validUntil: "2023-08-07", },{startTime: 660,time: "18:00-19:00", validFrom: "2020-08-07", validUntil: "2023-08-07", },],},{date: "2021-08-08", deliveryTimes: [],},{date: "2021-08-09", deliveryTimes: [],},{date: "2021-08-10", deliveryTimes: [{startTime: 600,time: "16:30-17:00", validFrom: "2020-08-10", validUntil: "2023-08-10", },{startTime: 660,time: "18:00-19:00", validFrom: "2020-08-10", validUntil: "2023-08-10", },],},],};
const deliveryAreaWithNoDeliveryTimes = { deliveryMethod: "PICKUP", deliverySlots: [{date: "2021-08-04", deliveryTimes: [],},{date: "2021-08-05", deliveryTimes: [],},{date: "2021-08-06", deliveryTimes: [],},{date: "2021-08-07", deliveryTimes: [],},],};
// will return true if there are any delivery times defined, false otherwise
const hasDeliveryTimes = (deliveryArea) => {
return deliveryArea.deliverySlots.some((slot) => {
return slot.deliveryTimes.length;
});
};
console.log(hasDeliveryTimes(deliveryArea));
console.log(hasDeliveryTimes(deliveryAreaWithNoDeliveryTimes));
Комментарии:
1. Я думаю, что не понимаю, в чем проблема… Возвращаемое значение соответствует имени функции. Использование
!
для отрицания абсолютно нормально… Или просто переключите свои выписки о возврате.2. Я все еще не понимаю, извини! Если он уже построен, как вы вообще собираетесь вставить свою вспомогательную функцию?
3. Я не понимаю, в чем проблема
!
… Вы могли бы поместить его перед возвращаемым значением внутри функции:return slot.deliveryTimes.length;
но тогда скорее должно быть имя функцииdoesNotHaveDeliveryTimes
…