#javascript #typescript
#javascript #typescript
Вопрос:
У нас есть 3 текстовых поля, которые принимают длину, ширину и высоту
Длина, ширина или высота не могут превышать 50
Длина, ширина или высота не могут быть больше 45
Длина, ширина или высота не могут быть больше 65
Таким образом, может быть следующая комбинация
45 * 50 * 65
50 * 45 * 65
65* 45 * 50
Я пишу логику на typescript, но не могу найти способ.
if (txtWidth.val() > 45 amp;amp; txtLength.val() < 65 amp;amp; txtHeight.val() < 50)
string error = "you exceeded measurement"
логика не завершена, но мне нужен хороший способ решить эту проблему, или любой хит поможет
Комментарии:
1. Если бы я не знал лучше 🤔 Я бы подумал, что вы пытаетесь получить ответы на свою домашнюю работу
2. @Scrimothy это не какая-то домашняя работа. это реальная логика в моем реальном проекте. Не используйте неправильный синтаксис кода. Я знаю, что синтаксис может быть неправильным в примере кода, который я опубликовал
Ответ №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, если переданное значение меньше всех диапазонов, 2, если оно больше 45, 1, если больше 50 и 0, если больше 65.
Тогда кратность всех проверок должна быть больше или равна 6 (3 * 2 * 1 )
if(check(width) * check(height) * check(length) < 6)
alert("invalid");
Комментарии:
1. можете ли вы рассказать, как вы объявляете константу в typescript, поскольку это выдает ошибку
2. я попытался преобразовать постоянную проверку в typescript, например, var check = function (v) { return (v < 45) (v < 50) (v < 65); }; но все равно выдает ошибку
3. @james вам следует попытаться понять сообщение об ошибке, прежде чем пускаться в догадки.
4. typescript, вероятно, не нравится, что вы неявно используете логическое значение в качестве числа в вашем выражении. Возможно, вам придется преобразовать их в числа, прежде чем вы сможете сложить их вместе
5. @Scrimothy можете ли вы привести мне пример приведения?
Ответ №2:
Вероятно, есть более краткий способ сделать это, но я думаю, что вы бы перебрали каждое измерение и сопоставили его с вашими 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));
Комментарии:
1. я изменил язык на typescript, о котором идет речь
2. @James вы должны иметь возможность использовать ту же функцию, что и выше, с typescript. Просто измените определение функции на
validateVolume(...args: [number, number, number]): boolean
3. что произойдет, если другие два параметра не определены. этот тест завершается ошибкой console.log(validateVolume(45, не определено, 65))
4. @James да, это был только счастливый путь. Я обновил свой фрагмент для проверки на соответствие undefined и null.