Javascript Joi-从数组的第一个元素访问对象项属性

Javascript Joi-从数组的第一个元素访问对象项属性,javascript,joi,Javascript,Joi,我有用于验证的架构: const schema2=Joi.object({ 优点:Joi.array().items(Joi.object({ 规格:Joi.object({ 类型:Joi.string().有效(“订单固定折扣”、“单位百分比折扣”).必需(), }).required() })).min(1).max(1).必选(), offerCriteria:Joi.array().items(Joi.object({ 类型:Joi.string().valid(“包含报价”).requ

我有用于验证的架构:

const schema2=Joi.object({
优点:Joi.array().items(Joi.object({
规格:Joi.object({
类型:Joi.string().有效(“订单固定折扣”、“单位百分比折扣”).必需(),
}).required()
})).min(1).max(1).必选(),
offerCriteria:Joi.array().items(Joi.object({
类型:Joi.string().valid(“包含报价”).required(),
提供:Joi.array().items(Joi.object({
数量:Joi.number().when(Joi.ref(“…benefits.0.specification.type”){
is:Joi.string().valid(“订单固定折扣”),
然后:Joi.required(),
否则:Joi.forbidden()
}),
promotionEntryPoint:Joi.boolean().when(Joi.ref(“..benefits.0.specification.type”){
is:Joi.string().valid(“订单固定折扣”),
然后:Joi.required(),
否则:Joi.forbidden()
})
})).min(1).required()
})).min(1).max(1).必选()
});
我的目标是设置
offerCriteria.offers.quantity
offerCriteria.offers.quantitypromotionEntryPoint
如果
福利.规格.类型

订单\固定\折扣
否则设置为禁止

我曾在以下情况下尝试过这种方法,但没有一种方法能够正常工作:

  • “…优点.规格.类型”
  • “…优点.0.规格.类型”
  • Joi.ref(“……福利0.规格.类型”)
  • Joi.ref(“……效益、规格、类型”)

我找到了解决这个问题的方法:

quantity: Joi.number().when("$specification_type", {
                is: Joi.string().valid("ORDER_FIXED_DISCOUNT"),
                then: Joi.required(),
                otherwise: Joi.forbidden()
            }),
验证时在上下文中设置了
$specification\u type

schema.validate(data, {context: {specification_type: data.benefits[0].specification.type}}})
我仍然在寻找一种使用模式而不是上下文的方法