【问题标题】:How can I check if an object has an empty value on a key?如何检查对象是否在键上具有空值?
【发布时间】:2019-09-21 12:00:32
【问题描述】:

我正在处理表单验证,我需要检查何时有空值。

到目前为止,验证是这样的:

const areFieldsFilledOut = () => {
    if (
      (size(startupThirdStepForm) === 9 &&
        !has(startupThirdStepForm, 'middleName')) ||
      size(startupThirdStepForm) === 10
    ) {
      stepThreeCardSelectedActionHandler(true);
      return false;
    }
    if (
      has(startupThirdStepForm.middleName) &&
      !startupThirdStepForm.middleName.length
    ) {
      stepThreeCardSelectedActionHandler(true);
      return false;
    }

    return 'disabled';
  };

中间名只是不需要的东西。 该对象最多可以有大约 15 个键。所以我想要对lodash -hopefully- 做的所有事情都是这样的验证: (伪代码)

    if (
       startupThirdStepForm has any key with an empty value
    ) {
      stepThreeCardSelectedActionHandler(false);
      return true;
    }

startupThirdStepForm 是包含我需要检查的对象。它是一个空对象,但键/值是动态创建的。

所以我需要像上面的伪代码一样返回true,当有这样的事情时:

startupThirdStepForm: { key1: 'I have a value', key2: '' }

当每个键都有正确的值而不是空值时,返回false

【问题讨论】:

    标签: javascript reactjs ecmascript-6 lodash


    【解决方案1】:

    您可以使用_.some() 来迭代对象的属性,并使用_.isEqual() 检查值是否为空字符串。

    const optional = ['middle']
    const startupThirdStepForm = { key1: 'I have a value', key2: '', middle: '' }
    
    const result = _.some(_.omit(startupThirdStepForm, optional), _.partial(_.isEqual, ''))
    
    console.log(result)
    <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.js"></script>

    与 lodash/fp 的想法相同:

    const fn = optional => _.flow(
      _.omit(optional),
      _.some(_.isEqual(''))
    )
    
    const optional = ['middle']
    
    const withoutOptional = fn(optional)
    
    console.log(withoutOptional({ key1: 'I have a value', key2: '' })) // true
    console.log(withoutOptional({ key1: 'I have a value', middle: '' })) // false
    <script src='https://cdn.jsdelivr.net/g/lodash@4(lodash.min.js+lodash.fp.min.js)'></script>

    【讨论】:

    • 我怎样才能忽略一个特定的键?我想忽略middle,因为它不是必填字段。
    • 您可以使用_.omit() 将其删除以进行检查。我将更新示例。
    【解决方案2】:

    如果只是关于自己的属性,您可以使用Object.values 将每个属性值作为数组获取,然后使用.some 检查它们是否为空:

    if (Object.values(startupThirdStepForm).some(v => v === '')) {
    
    }
    

    【讨论】:

      猜你喜欢
      • 2020-05-12
      • 2014-06-29
      • 2019-12-15
      • 1970-01-01
      • 1970-01-01
      • 2012-06-05
      • 2021-12-10
      • 2019-03-31
      • 1970-01-01
      相关资源
      最近更新 更多