我正在进行表单验证,我需要检查何时有空值。
到目前为止,验证是这样的:
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
。
答案 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>