javascript切换vs阵列上的循环

时间:2011-10-07 17:09:47

标签: javascript

我有这两个功能,我想知道哪一个更快。我假设第一个,但如果我要评估数百个案例呢?

function isSpecialKey(k) {
switch (k) {
case 9:
return true;
break;
case 16:
return true;
break;
case 17:
return true;
break;
case 18:
return true;
break;
case 20:
return true;
break;
case 37:
return true;
break;
case 38:
return true;
break;
case 39:
return true;
break;
case 40:
return true;
break;
default:
return false;
break;
}
}


function isSpecialKey(k) {
var arr = [9, 16, 17, 16, 8, 20, 37, 38, 39, 40]
for (i = 0; i < arr.length; i++) { if (k == arr[i]) { return true; } }
return false;
}

5 个答案:

答案 0 :(得分:4)

这种情况不太可能发生,即使有数百个案例也是如此。它可能开始涉及成千上万或数万,但在这种情况下,你可能不应该使用JavaScript!至少不在网络浏览器中。

通常 - 第二种方式是从维护角度来看唯一有意义的方法。我绝对会接受。

但是,根据您的具体情况,有一个better solution.

答案 1 :(得分:2)

而不是这样做,只需创建一个地图:

var specialKeys = {
    9: true,
    16: true,
    17: true,
    ...
    40: true
};

然后你可以像这样测试它:

if(specialKeys[value]) {
   ...
}

答案 2 :(得分:2)

怎么样?

function isSpecialKey(key) {
  return [9, 16, 17, 16, 8, 20, 37, 38, 39, 40].indexOf(key) > -1;
}

更新。我记得有些浏览器在数组上不支持indexOf,但我忘了它们中的哪一个,所以要小心。

答案 3 :(得分:1)

您可以在交换机中使用fallthrough,这样可以减少代码:

function isSpecialKey(k) {
  switch (k) {
    case 9:
    case 16:
    case 17:
    case 18:
    case 20:
    case 37:
    case 38:
    case 39:
    case 40:
      return true;
  }
  return false;
}

还要考虑:

function isSpecialKey(k) {
  return (
    k == 9 ||
    k == 16 ||
    k == 17 ||
    k == 18 ||
    k == 20 ||
    k == 37 ||
    k == 38 ||
    k == 39 ||
    k == 40
  );
}

答案 4 :(得分:0)

使用地图;更快。 “数以百计”的交换机永远不会接近通过代码审查。