【问题标题】:Cannot use object key to reference method in Javascript无法在 Javascript 中使用对象键来引用方法
【发布时间】:2018-07-23 19:17:11
【问题描述】:

我有一组方法用于验证存储在变量val 中的输入,这样我就可以像val.emailval["email"] 一样调用它们。我正在尝试创建一个通用函数,它将接受一个对象并根据键将验证函数应用于每个值。我的尝试如下:

const validateInput = data => {
  let errors = {};
  const keys = Object.keys(data);
  keys.map(key => {
    const error = val[key](data[key]);
    errors = { ...errors, ...error };
  });
  return errors;
};

我收到此错误:

TypeError: val[key] 不是函数

但是,以下代码执行成功:

const validateInput = data => {
  let errors = {};
  const test = "firstName";
  const errors = {...errors, ...val[test](data[test])};
  return errors;
};

当我记录键时,我得到一个字符串数组,当我记录 typeof 键时,我也得到字符串,所以我不明白为什么它在 map 函数中不起作用。

提前致谢。

【问题讨论】:

  • 因为data中存在一些在val中不存在的键
  • 你是对的。我忘记了我在一个函数中比较两个密码。我让它工作了,虽然它不那么漂亮。

标签: javascript arrays oop key array.prototype.map


【解决方案1】:

感谢上面的 Jonas,我能够弄清楚。我正在比较一个函数中的两个字段(密码和密码 2)。以下代码有效:

const validateInput = data => {
  let errors = {};
  const keys = Object.keys(val);
  keys.map(key => {
    let error;
    if (data.hasOwnProperty(key)) {
      switch (key) {
        case "password":
          error = val[key](data[key], data[`${key}2`]);
          break;
        default:
          error = val[key](data[key]);
          break;
      }
      errors = { ...errors, ...error };
    }
  });
  return { errors, isValid: isEmpty(errors) };
};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-06
    • 2011-10-22
    • 1970-01-01
    • 1970-01-01
    • 2013-01-28
    • 1970-01-01
    相关资源
    最近更新 更多