Javascript 在遍历数组时从状态访问值时出现问题

Javascript 在遍历数组时从状态访问值时出现问题,javascript,reactjs,Javascript,Reactjs,我正在尝试遍历数组并执行一些操作。但是我无法访问我想要的值 inputObj.map(el => { const msg = this.state.validation[el.id].message; const msg2 = this.state.validation['name'].message; }) 在这里,el.id可以是name、dob或address。当我使用this.state.validation[el.id].message时,它显示类型错误:无法读

我正在尝试遍历数组并执行一些操作。但是我无法访问我想要的值

inputObj.map(el => {
    const msg = this.state.validation[el.id].message;
    const msg2 = this.state.validation['name'].message;
})
在这里,
el.id
可以是
name
dob
address
。当我使用
this.state.validation[el.id].message时,它显示
类型错误:无法读取未定义的属性“message”
。但是如果我硬编码它,比如
this.state.validation['name'].message,工作正常。当比较
el.id
'name'
时,它们具有相同的数据类型和值。那么,为什么在使用
el.id
而不是硬编码时会出现问题呢

注意:我正在使用
reactjs

编辑:

该州:

this.state = {
    super(props);
    this.validator = new FormValidator([
        {
            field: 'name',
            method: 'isEmpty',
            validWhen: false,
            message: 'Name is required'
        },
        ...
    ]);

    orderForm: {
        name: {
             elementType: 'input',
             elementConfig: ''
        },
        ...
    }

    validation: this.validator.setValid() // it will be the updated upon submitting form on submitHandler by calling validate() from FormValidator
}
inputObj:

   const inputObj= [];
   for(let key in this.state.orderForm){
       inputObj.push({
           id : key,
           config: this.state.orderForm[key]
       });
   }
FormValidator

import validator from 'validator';

class FormValidator {
    constructor(rules){
        this.rules = rules;
    }

    setValid(){
        const validation = {};
        this.rules.map(rule => (
            validation[rule.field] = {isValid: true, message: ''}
        ));
        return {isValid: true, ...validation};
    }

    validate(form){
        let validation = this.setValid();
        this.rules.forEach( rule => {
            if (validation[rule.field].isValid){
                const field = form[rule.field].toString();
                const args = rule.args || [];
                const validationMethod = typeof rule.method === 'string' ?
                    validator[rule.method] : rule.method;

                if (validationMethod(field, ...args, form) !== rule.validWhen){
                    validation[rule.field] = {isValid: false, message: rule.message};
                    validation.isValid = false;
                }
            }
        });
        return validation;
    }
}

export default FormValidator;

您可以在获取
消息
键之前检查是否定义了
此.state.validation[el.id]

这样你就不会犯致命的错误

inputObj.map(el => {
  this.state.validation[el.id] && (
    const msg = this.state.validation[el.id].message
  );
})

你能展示一下这个.state.validation的外观吗?和
inputObj
too如果这有效
this.state.validation['name'].message
el.id
不等于
“name”
请尝试放置
console.log
以将
el.id
的值显示在
map
中。我通过console.log检查了它,并比较了它们。我用if-else检查了它们的类型和值,发现它们的类型和值相同@r3tep您的
inputObj
来自哪里?可能是异步代码,在执行循环时还没有填充。在循环中执行
console.log(el)
,检查内部内容,这是不可能的。请参阅,所提供的代码中没有错误,因此如果需要帮助,请使用更多信息进行编辑。与
inputObj
content类似,与
this.state.validation相同