Javascript switch(true)执行错误语句?

问题描述 投票:0回答:1

Im遍历坐标值的集合,并对坐标进行数学运算,以查看计算出的值是否在哈希图中。如果它们在哈希图中,则我想运行其他功能。由于我有多个案例要检查集合中的每个坐标,因此我发现使用switch语句替换if语句很不错,因此可以对所有检查进行可视化和逻辑分组。当我用开关替换if语句时,我的代码返回了错误的结果。当我调试时,我意识到即使大小写为false,有时也会执行switch语句(我添加了console.logs来输出相同开关条件的结果,它会显示false,但只有在为true时才运行)。这是一个小例子:

var idm = {0:1, 3:1, 9:1, 10:1, 11:1, 12:1, 20:1, 21:1, 23:1}

var findNeighbors = function(b) {

    var u,d,l,r,lRow,rRow;
    var currentBuilding = parseInt(b);
    var currRow = Math.floor(currentBuilding/column);

    //remove value from map so we dont recount it.
    delete idm[currentBuilding];

    u = currentBuilding - column;
    d = currentBuilding + column;
    l = currentBuilding - 1;
    lRow = Math.floor(l/column);
    r = currentBuilding + 1;
    rRow = Math.floor(r/column);

    console.log("current idx:" + currentBuilding);
    console.log("u:" + u + ", d:" + d + ", l:" + l + " r:" + r);
    // debugger;
    switch(true) {
      case (idm.hasOwnProperty(u) === true):
        console.log((idm.hasOwnProperty(u)));
        console.log("map has " + currentBuilding + " -> u: " + u);
        findNeighbors(u);
      case (idm.hasOwnProperty(d) === true):
        console.log((idm.hasOwnProperty(d)));
        console.log("map has " + currentBuilding + " -> d: " + d);
        findNeighbors(d);
      case (lRow === currRow && idm.hasOwnProperty(l) === true):
        console.log((lRow === currRow && idm.hasOwnProperty(l)));
        console.log("map has " + currentBuilding + " -> l: " + l);
        findNeighbors(l);
      case (rRow === currRow && idm.hasOwnProperty(r) === true):
        console.log((rRow === currRow && idm.hasOwnProperty(r)))
        console.log("map has " + currentBuilding + " -> r: " + u);
        findNeighbors(r);
    }
    console.log("---------------------------");
  }
javascript hashmap switch-statement
1个回答
2
投票

我认为使用switch语句替换if语句会很酷,因此我的所有检查都可以在视觉和逻辑上进行分组。

好吧,编写无法正常工作的代码。您忘记了break语句,因此执行流程fell through-在第一个匹配后不评估其他case表达式的情况。顺便说一句,将switch设为常数是一种可怕的(不明智的做法)。

改为使用标准的if / else

© www.soinside.com 2019 - 2024. All rights reserved.