Джой проверить порядок массива - PullRequest
1 голос
/ 13 апреля 2019

Я просмотрел API-интерфейсы Joi, но такой вещи, как порядок массивов, не существует. Я также посмотрел на Джой refs, но в настоящее время невозможно (поправьте меня, если я ошибаюсь) использовать их внутри массивов.

Я думаю об использовании extend, но не уверен, что можно получить весь массив.

Введите:

const asc = [1,2,3];
const noOrder = [10,7,8];
const desc = [6,5,4];

Желаемый выход:

Joi.validate(asc, Joi.array().asc()) // True
Joi.validate(asc, Joi.array().desc()) // False
Joi.validate(desc, Joi.array().desc()) // False
Joi.validate(noOrder, Joi.array().desc()) // False
Joi.validate(noOrder, Joi.array().asc()) // True

Итак, мой вопрос, как мне начать с этим? Любая идея с благодарностью

1 Ответ

1 голос
/ 13 апреля 2019

Joi не предлагает никакого встроенного способа проверки порядка массива, поэтому вам придется extend со своим собственным расширением, например:

const Joi = require('joi');

const customJoi = Joi.extend((joi) => ({
  base: joi.array(),
  name: 'array',
  language: {
      asc: 'needs to be sorted in ascending order',
      desc: 'needs to be sorted in descending order'
  },

  rules: [
      {
          name: 'asc',        
          validate(params, value, state, options) { 
            const isAscOrder = value.every((x, i) => i === 0 || x >= value[i - 1]);
            return isAscOrder ? value : this.createError('array.asc', {v: value}, state, options);             
          }
      },
      {
          name: 'desc',          
          validate(params, value, state, options) {
            const isDescOrder = value.every((x, i) => i === 0 || x <= value[i - 1]);
            return isDescOrder ? value : this.createError('array.desc', {v: value}, state, options);             
          }
      }
  ]
}));

const ascSchema = customJoi.array().asc();
const descSchema = customJoi.array().desc();

// Validation results.
console.log(Joi.validate([5, 7, 9, 10], ascSchema)); //true
console.log('\n\n');
console.log(Joi.validate([5, 7, 6, 10], ascSchema)); //false
console.log('\n\n');
console.log(Joi.validate([5, 4, 2, 0], descSchema)); //true
console.log('\n\n');
console.log(Joi.validate([5, 4, 2, 6], descSchema)); //false
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...