【问题标题】:javascript logical else if not working [closed]如果不工作,javascript逻辑否则[关闭]
【发布时间】:2023-03-09 14:17:01
【问题描述】:

我对 else if 有疑问 在我的情况下,最后一个不起作用

var pakeEach = $(".Thide").each(function () {
    var cat = $(this).val();
    if (cat.indexOf(PCatId) == -1) {
        console.log("Pilih tidak ada di your aksess")
    } else {
        if (cat.indexOf(PCatId) != -1) {
            console.log("Show only " + cat);
        } else {
            console.log("Remove");//why not working last else
        }
    }
});

【问题讨论】:

  • 你的逻辑不对,因为不能调用inner else:if (cat.indexOf(PCatId)==-1) else if(cat.indexOf(PCatId)!=-1) else (no other output possible)
  • 嗨 wolff,你的解决方案是什么..
  • 但在哪种情况下应该调用console.log("Remove");?我不明白你的逻辑
  • 正如 A. Wolff 所说,只有 if 将首先在内部工作。你永远无法达到第二。

标签: javascript php jquery dom


【解决方案1】:

试试这个:

    var pakeEach = $(".Thide").each(function () {
    var cat = $(this).val();
    if (cat.indexOf(PCatId) == -1) 
    {
        console.log("Pilih tidak ada di your aksess");
         console.log("Remove");
    } 
    else 
    {
            console.log("Show only " + cat);
    } 
});

【讨论】:

  • 嗨,Hussam 你的 else if "Uncaught SyntaxError: Unexpected identifier"
  • 我已经编辑了我的答案忘记了 "(" for else if。
  • 什么情况下会调用else?除非我遗漏了一些非常重要的东西,否则它是一个完全未使用的分支。
  • 你永远不会到达最后一个。
  • 嗨,Hussam,最后还是无法阅读
【解决方案2】:

你想要做的是:

var pakeEach = $(".Thide").each(function () {
    var cat = $(this).val();
    if (!cat) {
        console.log("Pilih tidak ada di your aksess")
    } else if (cat === PCatID) {
        console.log("Show only " + cat);
    } else {
        console.log("Remove");
    }
});

首先检查cat是否为空,然后根据其值进行分支。

【讨论】:

  • 嗨 Joanis,我只想检查 if(cat == PCatId){display)else(remove) 但是 if(cat noting in PCatid){Display All)
  • if (!cat) { display all } else if (cat.localeCompare(PCatID) == 0) { display } else { remove } 怎么样?第一个 if 检查 cat 是否为空,第二个 if 检查 cat == PCatID。
  • 我更新了我的答案以反映我对您的问题的新理解。我使用=== 来比较字符串而不是localCompare,因为这似乎更常用。
【解决方案3】:

从你的逻辑开始:

if (value == -1) {
    ...
} else {
    if (value != -1) {
        ...
    } else {
        ...
    }
}

您可以将其简化为:

if (value == -1) {
    ...
} else if (value != -1) {
    ...
} else {
    ...
}

如您所见,您是在说“如果值是 -1 则 ...,否则如果值不是 -1...”这涵盖了两种可能的情况:值只能是 -1 或不是 - 1(正如 A. Wolff 在 cmets 中所讨论的)。

else永远不会被命中,因为所有可能的分支都已经被覆盖了。

如果您想在其他分支之一(可能是找到该项目的分支)中包含删除逻辑,您应该使用类似:

if (value === -1) {
    console.log("Pilih tidak ada di your aksess")
} else {
    console.log("Show only " + cat);
    console.log("Remove!");
}

这是写同一件事的更简洁的方式。请注意,=== 运算符通常优于 ==,尤其是当您知道要比较相同类型的对象时。

因为您正在调用indexOf,所以唯一可能的结果是该项目在集合中(indexOf(foo) > -1)或不在集合中(indexOf(foo) === -1)。这里没有第三个选项,除非你关心它在集合中的哪里

例如,如果该项目不是集合中的第一个项目,则要删除它,您可以使用:

if (value === -1) {
    console.log("Pilih tidak ada di your aksess")
} else if (value === 0) {
    console.log("Show only " + cat);
} else {
    console.log("Remove!");
}

由于if 条件仅匹配可能值的一小部分,因此在这种情况下实际上可以命中else

【讨论】:

    【解决方案4】:

    算法你在说 如果 cat.indexOf(PCatId) 等于 -1 则 执行第一个 if 块

    else 执行第二个块,它在逻辑上处理 cat.indexOf(PCatId) 与 -1 不同的情况。

    我的意思是在第一个 else 你永远不会得到 cat.indexOf(PCatId) == -1 因为你在第一个 if 这是您的一些修改和 cmets 的答案:

    var pakeEach = $(".Thide").each(function () {
        var cat = $(this).val();
        if (cat.indexOf(PCatId) == -1) {
            // this part of code is executed if cat.indexOf(PCatId) == -1
            console.log("Pilih tidak ada di your aksess")
        } else {
            // here at this level we can never get cat.indexOf(PCatId) == 1
            if (cat.indexOf(PCatId) != -1) {
                console.log("Show only " + cat);
            }
            // this else should be removed !!!! because it is useless
            else {
                console.log("Remove");//why not working last else
            }
        }
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-04-28
      • 2018-08-02
      • 2013-03-15
      • 2011-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多