我想根据条件返回不同的字符串。 我有一个3个问题的形式,每个问题有4个选项可供选择(无线电),每个选项都有一个值..它看起来像这样:
Question Possible Answers Value
-----------------------------------------------------------
1-25 0
26-40 5
question 1 41-60 8
60+ 10
-----------------------------------------------------------
1-25 0
26-40 5
question 2 41-60 10
60+ 10
-----------------------------------------------------------
1-25 0
26-40 5
question 3 41-60 10
60+ 15
-----------------------------------------------------------
我有每个问题的值,现在我想返回一个自定义字符串,如果值的总和大于25.在字符串中我想显示一个问题的值大于或等于10。
例如:用户为问题1(值= 5)选择选项2,为问题2选择选项3(值= 10),为问题3选择选项4(值= 15)
我的字符串是:最高值在问题2和问题3中。
这是我的实验:
if (total_Value > 25) {
switch (true) {
case (question1_Value >= 10 && question2_Value >= 10 && question3_Value < 10)
return "Highest values are in question1 and question2";
case (question1_Value >= 10 && question2_Value < 10 && question3_Value >= 10):
return "Highest values are in question1 and question3";
}
}
依旧等等。我基本上都在检查各种可能性并相应地修改了回报,但这并不是最好的,特别是如果我有5个问题的话。
我希望在没有巨大的switch语句或if语句的情况下这样做。请帮忙。我希望我的问题有道理。谢谢!
答案 0 :(得分:2)
当人们第一次开始学习编程时,这是一个典型的错误。你尝试用你的逻辑做太多,最后得到一千个 if / else / else if ,切换语句, while循环和 for循环。你会特别看到新手试图实现经典的tic-tac-toe游戏,但这是另一个例子。
问题不是您要做的事情,而是您管理数据的方式。
每个问题的值应不存储在单个变量中,至少在您尝试计算最高值时。数据彼此相关。我们需要用代码来表明。执行此操作的最佳方法是将信息存储在数组中,或者替换为对象。
你还需要考虑你在寻找什么。您想要一个输出,指示哪些问题(可能是两个)具有最高值。这一切都很好,但这意味着我们需要以某种价值来传达问题。我们可以通过参数顺序(使用数组)或显式标签(使用对象)确定这一点,这些数据存储在您的数据中,告诉您的程序链接的是什么问题如下所示,或将它们组合起来。
我们使用Array.prototype.reduce
获得最高分。我们允许一个忽略奇异值的排除参数。当我们用这个排除参数调用函数时,我们可以得到第二个最高值。
我们根据数组中的索引返回一个问题编号(+1,因为索引从0开始)和一个值。它们作为返回对象的属性组合在一起。这样可以轻松获得最高值和第二高值,并在控制台或屏幕上显示它们。
var q1 = 10,
q2 = 10,
q3 = 50,
value_arr = [q1, q2, q3],
max = highest(value_arr),
max2 = highest(value_arr, max.value);
console.log("question " + max.question + " and question " + max2.question + " are the highest.");
function highest(value_array, exclude = null) {
return value_array.reduce(function(max, v, currentIndex) {
if (v > max.value && v != exclude) {
max.value = v;
max.question = currentIndex + 1
}
return max;
}, {
question: 0,
value: 0
});
};