【问题标题】:java script using array to store conditionsjavascript使用数组存储条件
【发布时间】:2015-07-24 17:35:43
【问题描述】:

如何将 if 条件语句添加到数组中(java 脚本)

我在将条件语句存储在数组中时遇到问题。我可以让代码运行,但我得到了意想不到的结果。本节的目的是从用户输入框中找到状态名称。然后检查邮政编码输入框,检查邮政编码是否在该州邮政编码范围内。

**iv 简化了代码,使其易于理解,但仍然遇到相同的错误

由于 X 的值为 1000,因此不应在两个数组索引值上都将其作为 true 传递,但由于某种原因它会传递。这可能是非常简单的修复,但我真的很困惑为什么它不起作用。抱歉,这是我在 javascript 中的第一个单元,所以我无论如何都不是专家。

function x()
{

    var x = 1000;
  
    var conditionArray = [
        (2000 <= x < 3000),
        (6000 <= x < 7000)
		];
    
    var i =0;
    
    while (conditionArray.length > i)
    {
            // x for some reason is always passed as true
            if (conditionArray[i])
            {
                alert("within range");
            } 
            else
            {
				alert("not within range");
            }
        i++;
    }
}

【问题讨论】:

  • 一个循环遍历数组?为什么?
  • 为什么不呢?怎么违反规定?
  • 2000 &lt;= x &amp;&amp; x &lt; 3000
  • 在人们开始回答问题后完全重写问题可能不是一个好主意,顺便说一句。
  • 抱歉,人们很难理解我想要表达的意思。感谢您的帮助!

标签: javascript arrays if-statement conditional-statements


【解决方案1】:

既然你已经完善了你的帖子,试试这个:

    function x () {
      var
        x = 1000,
        i = 0,
        conditionals = [
          (x >= 2000 && x < 3000),
          (x >= 6000 && x < 7000)
        ];

      while (conditionals.length > i) {
        // x for some reason is always passed as true.
        if (conditionals[i]) {
          alert('Within range');
        } else {
          alert('Not within range');
        }
        i += 1;
      }
    }

您的布尔表达式写错了。这在数学上是可以的,但是在 JS 中,如果您想知道值是否在一个范围内,则需要将每个评估视为两个问题。

这样写,你可以清楚地看到 1000 不在 2000 和 3000 之间,也不在 6000 和 7000 之间。所以它们都计算为false。如果您在原始示例中将两个值都设为true,则可能是因为类似的错误评估。

【讨论】:

  • 另外,为什么关于x 的评论写在while 循环中?那里没有涉及x 的内容。
  • 不客气。您可以通过选择最佳答案关闭主题。
【解决方案2】:

您返回了postcodeNameBoolean 而不是postcodeNumberBoolean

【讨论】:

  • 我修正了这个名字,但这不是我的主要问题。不过谢谢
  • 您仍在将true 值分配给postcodeNameBoolean 并返回postcodeNumberBoolean
  • 谢谢,我曾多次重命名变量并错过了这些变量,因为我还没有开始该过程的那个阶段。我主要关心的是为什么数组中的条件给出了不正确的响应。
【解决方案3】:

一些修订:

  • stateSelected(下面将其重命名为 selectedState)未定义。
  • validChangeInputStyle 在原帖中拼写错误。
  • 从变量名中删除数据类型的解释。这是不好的做法。 (例如,somethingArray、somethingInteger 等)
  • 使用+ 运算符为数字的字符串表示形式添加前缀,以将它们转换为Number 构造函数的实例。确保操作员触摸变量名。
  • 将左大括号与声明放在同一行。
  • if 的右大括号所在的行写上else {
  • 每个作用域只使用一次var
  • 定义函数时,在函数括号前后设置一个空格。应用函数时,只让括号接触函数名。
  • zipcodeNumber(以前是 postcodeNumberBoolean)在 ifelse 块中返回,因此它被分解为低于条件 - 写入一次。
  • 使用++ 运算符将数字增加1i += 1 的语法糖(有时被误用)——这也是i = i + 1 的糖。所以你对你的意思做的抽象越少越好。 += 有更多意图。但是,许多人会对此进行辩论。

您需要回答一些问题,希望能帮助我们解决问题:

  • zipcodeNumber 的用途是什么?
  • 邮政编码不是五位数吗?为什么要进行相等性测试以确保它在四位数字之间?
  • while 循环的目的是什么?您是否故意不使用for 循环?
  • 能否请您扩展一下最终目标?可能有更清晰的方式来写这个,我们可以一起努力。

    function matchZipcode () {
      var
        statePatterns = [
          /(nsw|new\ssouth\swales)/gi,
          /(qld|queensland)/gi,
          /(vic|victoria)/gi,
          /(act|australian\scapital\sterritory)/gi,
          /(tas|tasmania)/gi,
          /(nt|northern\sterritory)/gi,
          /(sa|south\saustralia)/gi,
          /(wa|western\australia)/gi
        ],
        zipcodeRanges = [
          (2000 <= zipcodeInput < 3000),
          (4000 <= zipcodeInput < 5000)
        ],
        zipcodeNumber = false,
        error = 'Error: post code does not match selected state.',
        zipcodeInput = +document.getElementById('postcode-input').value,
        i = 0;
    
      while (statePatterns.length > i) {
        if (statePatterns[i].test(selectedState)) {
          if (zipcodeRanges[i]) {
            alert('within range');
            zipcodeNumber = true;
            validChangeInputStyle('postcode', 'postcode');
          } else {
            invalidResponse('postcode', error, 'postcode');
          }
          return zipcodeNumber;
        }
        i += 1;
      }
    }
    

【讨论】:

  • 邮政编码在澳大利亚是不同的,它们是 4 位数字。抱歉,这只是更大代码的一小部分。我基本上只是想弄清楚如何将条件放入数组以使用循环测试值。我刚刚更新了代码,以便更容易理解我的目标。
猜你喜欢
  • 2017-02-09
  • 2015-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多