Как я могу проверить, имеет ли объект пустое значение для ключа? - PullRequest
0 голосов
/ 03 мая 2019

Я работаю над проверкой формы, и мне нужно проверить, есть ли пустое значение.

До сих пор валидация проходила так:

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 ]

1 голос
/ 03 мая 2019

Вы можете использовать _.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>
1 голос
/ 03 мая 2019

Если речь идет только о собственных свойствах, вы можете использовать Object.values, чтобы получить каждое значение свойства в виде массива, а затем использовать .some, чтобы проверить, пусто ли какое-либо из них:

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

}
...