最大量测的验证逻辑

时间:2019-03-13 20:59:19

标签: javascript typescript

我们有3个文本框,可以接受长度,宽度和高度

长度,宽度或高度不能大于50

长度,宽度或高度不能大于45

长度,宽度或高度不能大于65

所以可以有下面的组合

45 * 50 * 65

50 * 45 * 65

65 * 45 * 50

我正在用打字稿写逻辑,但是找不到方法。

 if (txtWidth.val() > 45 && txtLength.val() < 65 && txtHeight.val() < 50)
    string error = "you exceeded measurement"

逻辑尚不完整,但我需要解决此问题的好方法,否则任何打击都会有所帮助

2 个答案:

答案 0 :(得分:1)

您可以采取以下三种措施,将其按大小排序,然后应用条件:

 const sizes: number[] = [width, height, length].sort();
 if(sizes[0] >= 45 || sizes[1] >= 50 || sizes[2] >= 65)
   alert("incorrect");

或者,您针对所有范围的每个值,例如:

 const check = (v: number) => +(v < 45) + +(v < 50) + +(v < 65);

如果传递的值小于所有范围,则返回3;如果大于45,则返回2;如果大于50,则返回1;如果大于65,则返回0。

然后所有检查的倍数必须大于或等于6(3 * 2 * 1)

 if(check(width) * check(height) * check(length) < 6)
   alert("invalid");

答案 1 :(得分:1)

可能有一种更简洁的方法来执行此操作,但是我认为您要遍历每个维度并将其与3个最大值匹配。我将删除最匹配的最低维度,以便您有更多空间容纳其他尺寸,这些尺寸可能小于一个最大值。

function validateVolume(...args) {
  const maxes = [45, 50, 65];
  
  return args.every((dimension) => {
    if (dimension === null || dimension === undefined) {
      return false;
    }
    return maxes.some((max, index) => {
      const match = dimension <= max;
      if (match) {
        maxes.splice(index, 1);
      }
      
      return match;
    });
  });
}
console.log(validateVolume(undefined, 65, 50));
console.log(validateVolume(45, 65, 50));
console.log(validateVolume(45, 50, 65));
console.log(validateVolume(46, 50, 65));