Джой, проверяй различные схемы массивов в зависимости от длины массива

У меня возникла проблема с Joi, которую я изо всех сил пытался решить, и я использовал массу другого синтаксиса, чтобы попытаться решить ее.

В основном у нас есть две схемы ниже. Скажем, в раскрывающемся списке есть 5 вариантов. Если в массиве есть только один элемент, требуется только arraySchemaOne, а если в нем более одного элемента, то требуются как первая, так и вторая схемы.

const arraySchemaOne = Joi.object({
    dropdown: Joi.string().valid('Option 1')
}).required();

const arraySchemaTwo = Joi.object({
    dropdown: Joi.string().valid('Option 2')
}).required();

this.validationPattern = Joi.object().pattern(/\w/, Joi.object(
    {
          rows: Joi.ref('rows.length >= 2')
          ?
          Joi.array().items([arraySchemaOne, arraySchemaTwo])
          :
          Joi.array().items([arraySchemaOne])
    }
));

Если у кого-то есть синтаксис, который может помочь в решении этой проблемы, было бы здорово. Я пробовал много вещей за последние несколько дней и не смог решить эту проблему.

Привет, @KatherineGG28, есть ли причина, по которой ты используешь Joi для интерфейса? Joi не очень хорош для проверки браузера, Yup — это альтернатива браузеру с похожим API. Кроме того, не могли бы вы объяснить, чего вы пытаетесь достичь с точки зрения данных, а не схем?

Jose Munoz 16.03.2019 02:13

Joi был представлен другим инженером, и во всех остальных случаях он отлично работал для наших схем данных. В основном у меня есть массив объектов. Когда в массиве находится только один элемент, значение раскрывающегося списка должно быть вариантом 1, когда два элемента находятся в значении одного, должно быть значение 1, а значение другого должно быть вариантом 2. Если элементов больше двух, скажем, 5 элементы, один из них должен иметь значение с опцией 1, а другой должен иметь опцию 1, но остальные 3 могут быть любыми.

KatherineGG28 18.03.2019 18:25
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
2
1 176
1

Ответы 1

@ katherineGG28 katherineGG28, возможно, вы захотите изучить следующую документацию, API joi предоставляет метод when, в котором вы можете передать ссылку, которая у вас уже есть, в качестве первого параметра, а затем заполнить параметры своими альтернативными схемами. С другой стороны, если другой инженер представил библиотеку, вы должны хотя бы проверить файл README в репозитории, в котором четко указано, что эта библиотека не была разработана с учетом браузеров.

https://github.com/hapijs/joi/blob/v14.3.1/API.md#anywhenусловные-опции

да, я думаю, это происходит, когда вы не добираетесь до конца страницы, хотя реализация, которую вы хотите, покрывается предоставленным API. github.com/hapijs/joi#browsers

Jose Munoz 19.03.2019 18:48

Я не думаю, что переход на Yup приведет к автоматическому раскрытию этого дела. Проблема заключается в том, что это не простой способ проверки массива объектов на основе того, является ли длина массива определенным числом. Вопрос был не в том, какой API проверки использовать, а в том, как справиться с определенным случаем проверки.

KatherineGG28 19.03.2019 20:18

Другие вопросы по теме