Проверки по крайней мере два из 4 значений JavaScript - PullRequest
0 голосов
/ 02 января 2019

На самом деле я новичок в javascript Я использовал disabled здесь,

Теперь в этом,

!props.updatedOption1 || !props.updatedOption2 || !props.updatedOption3 || !props.updatedOption4 

У меня есть эти четыре условия,

Теперь, что я хочу, это то, что if two are filled then it should be enabled, сейчас происходит то, что четыре из них compulsary.

Итак, я пробовал с условием &&, но оно становилось слишком длинным.

Итак, кто-нибудь может предложить мне другое решение?

Ответы [ 5 ]

0 голосов
/ 02 января 2019

Если updatedOption1-4 - единственные свойства props, то вы можете сделать это:

const isValid = Object.values(props).filter(p => p).length >= 2;
0 голосов
/ 02 января 2019

Вы можете обработать bool значения как int:

if((props.updatedOption1 + props.updatedOption2 + props.updatedOption3 + props.updatedOption4) <= 2)
{
  //...
}

Я использовал <=2 здесь, потому что вы использовали !props.updatedOption в примере.

0 голосов
/ 02 января 2019

Попробуйте это

['updatedOption1', 'updatedOption2', 'updatedOption3', 'updatedOption4'].filter((option) => 
props[option]).length >= 2;
0 голосов
/ 02 января 2019

Вы можете превратить их в массив, затем filter вывести ложные значения и посмотреть, равна ли длина результирующего массива двум или больше. Поскольку два параметра true ниже, он оценивается как «Включено»:

var props = {
  updatedOption1: false,
  updatedOption2: true,
  updatedOption3: true,
  updatedOption4: false
};

var options = [props.updatedOption1, props.updatedOption2, props.updatedOption3, props.updatedOption4];
options = options.filter(e => e);
if (options.length >= 2) {
  console.log("Enabled!");
} else {
  console.log("Disabled!");
}
0 голосов
/ 02 января 2019

Вы можете посчитать параметры с помощью Array#reduce.

var options = ['updatedOption1', 'updatedOption2', 'updatedOption3', 'updatedOption4']


if (options.reduce((s, k) => s + !props[k], 0) >= 2) {
    // ...
}

Или вы можете использовать замыкание для подсчета и выйти раньше, если условие соответствует

var options = ['updatedOption1', 'updatedOption2', 'updatedOption3', 'updatedOption4']


if (options.some((c => k => !props[k] && !--c)(2))) {
    // ...
}
...