代码之家  ›  专栏  ›  技术社区  ›  me-me

使用js检查所有输入字段是否有效

  •  1
  • me-me  · 技术社区  · 6 年前

    我有一个数组叫做 格式值 ,表示每个输入字段的对象。当用户在字段中键入对象时,对象将被添加到数组中。 我想要一种方法来检查是否所有的字段总是4是有效的,并有一个值不是空的。

    这是组成每个字段的对象。

    [{{name:firstname, value:'fdfs', valid: true }}, next object... ]
    

    我需要一种方法来检查是否所有字段都是有效的,并有一些东西的价值。

    我所拥有的是接近,但我有点卡住了。 记住不是所有的对象都会在formValues数组中,直到输入到每个对象中,所以我需要检查它。

    const allValid = names.map((name) => {
      return formValues that matches name must be valid and have a value length 
    });
    

    每次我的React组件更新时,该函数都将运行。

    2 回复  |  直到 6 年前
        1
  •  0
  •   EyasSH    6 年前

    让我们把它分成几部分:

    1. “匹配名称的formValues”

      那只是:

      const item = formValues.find(item => item.name === name);
      // check that item is not undefined.
      
    2. “必须有效并具有值长度”

      item && item.valid && item.value.length > 0
      

    const allValid = names.every(name => {
      const item = formValues.find(item => item.name === name);
      return item && item.valid && item.value.length > 0;
    });
    
        2
  •  0
  •   Reuven Chacha    6 年前

    为了提高效率,我将表单值简化为formValueName=>formValue的映射。

    1. formValues
    2. 将每个名称映射到相应的表单值(默认为空对象)
    3. 根据您的定义,使用 every

    代码:

    const formValuesMap = formValues.reduce((init, curr) => 
        Object.assign(init, {[curr.name]: curr}), {});
    
    const isAllValid = names
        .map(name => formValuesMap[name] || {})
        .every(({ valid, value }) => valid && value && value.length > 0);