【问题标题】:for loop pushing to many values into an arrayfor循环将许多值推入数组
【发布时间】:2014-10-09 20:56:27
【问题描述】:

注意:Jquery 或 JS 分辨率。我有一个名为“十进制”的数组,它接收 11 个十进制值,其中整数被删除(例如:0.25)

如果我对 Decimal 数组中的单个值运行这 7 个 if 语句,如下所示,我会在“Fraction”数组中得到 1 个值,这是我想要确认 if() 语句中的逻辑是正确的。

        if (Decimal[1] <= 0.125) {Fraction.push('1/8');}
        if (Decimal[1] <= 0.25) {Fraction.push('1/4');}
        if (Decimal[1] <= 0.375) {Fraction.push('3/8');}
        if (Decimal[1] <= 0.50) {Fraction.push('1/2');}
        if (Decimal[1] <= 0.625) {Fraction.push('5/8');}
        if (Decimal[1] <= 0.75) {Fraction.push('3/4');}
        if (Decimal[1] <= 1) {Fraction.push('7/8');}

只要我将这 7 个 if 语句放入 for 循环中,我就会在分数数组中得到 44 个值(我期待 11 个)。请参阅下面的代码:

for (var t = 0; t < Decimal.length; t++) {
        if (Decimal[t] <= 0.125) {Fraction.push('1/8');}
        if (Decimal[t] <= 0.25) {Fraction.push('1/4');}
        if (Decimal[t] <= 0.375) {Fraction.push('3/8');}
        if (Decimal[t] <= 0.50) {Fraction.push('1/2');}
        if (Decimal[t] <= 0.625) {Fraction.push('5/8');}
        if (Decimal[t] <= 0.75) {Fraction.push('3/4');}
        if (Decimal[t] <= 1) {Fraction.push('7/8');}
    }

【问题讨论】:

  • 如果一个数小于或等于0.125,那么它也小于或等于1,对吧?
  • 使用if .... else if ..
  • 如果你有 .003 它比所有这些数字都少,所以它们会被推送?
  • 如果数字是小数,例如 0.1,则不会...我不确定我是否理解您的意思。
  • @dm8021122:0.1小于0.125,所以你推1/8,但是0.1也小于0.25,所以你也推1/4等等.小于0.125 的任何值都将推送所有7 值。我想那不是你想要的。正如其他人所说,使用else if

标签: javascript jquery arrays for-loop


【解决方案1】:

除了第一个条件之外,你需要 else if 语句,否则一个值可以匹配多个语句:

for (var t = 0; t < Decimal.length; t++) {
  if (Decimal[t] <= 0.125) {Fraction.push('1/8');}
  else if (Decimal[t] <= 0.25) {Fraction.push('1/4');}
  else if (Decimal[t] <= 0.375) {Fraction.push('3/8');}
  else if (Decimal[t] <= 0.50) {Fraction.push('1/2');}
  else if (Decimal[t] <= 0.625) {Fraction.push('5/8');
  else if (Decimal[t] <= 0.75) {Fraction.push('3/4');}
  else if (Decimal[t] <= 1) {Fraction.push('7/8');}
}

【讨论】:

  • 这不是和我的回答完全一样吗?有两个相同的答案有什么价值?
  • @Hogan 很抱歉,当我发布您的答案时,您的答案不存在 - 在火车上,互联网不可靠,一定是后来才上传的 xD
【解决方案2】:

不确定你做了什么测试,但这是你需要的逻辑:

for (var t = 0; t < Decimal.length; t++) {
    if (Decimal[t] <= 0.125) {Fraction.push('1/8');}
    else
    if (Decimal[t] <= 0.25) {Fraction.push('1/4');}
    else
    if (Decimal[t] <= 0.375) {Fraction.push('3/8');}
    else
    if (Decimal[t] <= 0.50) {Fraction.push('1/2');}
    else
    if (Decimal[t] <= 0.625) {Fraction.push('5/8');}
    else
    if (Decimal[t] <= 0.75) {Fraction.push('3/4');}
    else
    if (Decimal[t] <= 1) {Fraction.push('7/8');}
}

注意:最好在其他区域使用{},但我懒得输入所有这些。

【讨论】:

  • 感谢您帮助解决问题。我对我所拥有的和你放下的之间的区别感到有点困惑。除了说技术上我写了 7 个 if 语句,而你写了 1 个长 if else 语句。这就是导致我的问题的原因吗?
  • @dm8021122 - 这是看待它的一种方式。您的逻辑检查了该值 7 次,并且某些值多次为真。我的逻辑只检查找到真值所需的次数,然后停止检查。这就是我的想法。还有其他方法可以使用我的相同逻辑来解决这个问题——例如你使用 switch 语句。
猜你喜欢
  • 2015-10-24
  • 2012-02-18
  • 2017-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多