Java脚本使用数组来存储条件

java script using array to store conditions

本文关键字:存储 条件 数组 脚本 Java      更新时间:2023-09-26

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

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

**我简化了代码,所以它很容易理解,但仍然会出现同样的错误

由于X的值为1000,它不应该在两个数组索引值上都作为真值传递,但由于某种原因它确实传递了。这可能是非常简单的修复,但我真的很困惑,为什么它不工作。对不起,这是我第一次学习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++;
    }
}

现在你已经修改了你的帖子,试试这个:

    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,在您的原始示例中,这可能是因为类似的错误计算。

您返回的是postcodeNameBoolean而不是postcodeNumberBoolean

一些修改:

  • stateSelected(下面重命名为selectedState)是未定义的。
  • validChangeInputStyle在原帖子中拼写错误。
  • 从变量名中删除对数据类型的解释。这是不好的练习。数组(例如,,东西整数,等等)
  • 使用+运算符为数字的字符串表示法前缀,将其转换为Number构造函数的实例。确保操作符触及变量名。
  • 将开始大括号放在与声明相同的行上。
  • else {if的右括号写在同一行。
  • 每个作用域只使用一次var
  • 定义函数时,在函数括号前后设置一个空格。当应用函数时,只让圆括号触及函数名。
  • zipcodeNumber(以前是postcodeNumberBoolean)在ifelse块中返回,因此它被分解为低于条件-写入一次。
  • 使用++运算符以1增加一个数字是i += 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;
      }
    }