我们有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"
逻辑尚不完整,但我需要解决此问题的好方法,否则任何打击都会有所帮助
答案 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));