首页 > 解决方案 > 如何访问数组内的嵌套对象来验证它?

问题描述

这是我的架构:

  detail: [{
         quantity: Number,

         product:{

            name: String,
            code: Number,
            price: Number
          },
          subtotal: Number

       ]}

这是我的验证方法

  const validations = values => {

     const errors = {

       product: {}

       }

  if(!values.detail || 
      !values.detail.length){

   errors.detail = {_error: 'at 
    least one item must be 
        required'}
   }

    else{

 const detailArrayErrors = []

      values.detail.forEach(   
     (item,itemIndex) =>{

       const detailErrors = {}

     if(!item || !item.quantity){
         detailErrors.quantity 
             ='Required'

    detailArrayErrors[itemIndex]=

        detailErrors 
        }

    if(!item || !item.subtotal){

      detailErrors.subtotal 

        = 'required'


   detailArrayErrors[itemIndex]

         = detailErrors
          }

     //How can I access product
      // in validations method

       })

    if(detailArrayErrors.length)

     errors.detail = 
        detailArrayErrors


    }

      return errors;
          }

    export default validations;

产品是我嵌套的 json 对象的详细信息。细节是一个数组。我想验证产品。如何访问数组内的嵌套 json 对象以对其进行验证?

我试过使用 for... of,但它没有结果。

我在网上搜索,但我什么也找不到。

我怎样才能做到这一点?

有谁知道吗?

标签: javascriptreactjs

解决方案


values.detail.forEach(d=> console.log(d.product));

要获取无效数组,例如:

let invalidItems = values.detail.filter(d => !d.product || !d.quantity || 
!d.product.name);

对数组中的每个项目做一些事情:

this.values.detail.forEach(i => 
{
 let detailErrors = {'quantity': null, product: null};


if (!i.quantity)
  {
    detailErrors.quantity= 'Required'
  }
 if (!i.product)
  {
   detailErrors.product = 'Required'
  }
if (i.product && !i.product.price)
  {
    detailErrors.product = {'price' :'Required'}
  }

});

推荐阅读