如何根据Javascript中的条件返回字符串的不同变体?

时间:2018-03-05 16:11:05

标签: javascript forms if-statement

我想根据条件返回不同的字符串。 我有一个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语句的情况下这样做。请帮忙。我希望我的问题有道理。谢谢!

1 个答案:

答案 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
  });
};