如何检查对象的键上是否有空值?

时间:2019-05-02 23:08:40

标签: javascript reactjs ecmascript-6 lodash

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

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

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所做的所有事情是这样的另一项验证: (伪代码)

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

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

因此,当发生以下情况时,我需要像上面的伪代码一样返回true

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

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

2 个答案:

答案 0 :(得分:1)

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

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

}

答案 1 :(得分: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>