Javascript switch 语句中的失败问题
Fallthrough issue in Javascript switch statement
我有大量具有 p 和 u 属性的特征。我想在数组中找到最小和最高的 p 和 u 并在循环中创建此 switch 语句。这在大约 99.9% 的时间内有效。然而。我有一个数据集,即使值分布均匀且平均值不相同,最大值和最小值也相同。难倒了。
switch(true) {
case p > max_p:
max_p = p;
case u > max_u:
max_u = u;
case p < min_p:
min_p = p;
case u < min_u:
min_u = u;
}
我 运行 通过 firebug 中的循环,可以看到如果您 < max_u,max_u 有时会更新。例如 u = 0.066, max_u = 0.088.
Pycharm 告诉我一个 fallthrough 问题,但该语句在我抛出的所有其他数据集上工作正常。
我可以将语句分成两部分。性能损失很小,但我想了解这是怎么发生的。
谢谢,
丹尼斯
编辑:
分成两个语句,数据集完全正常工作,语句中没有中断。
switch(true) {
case p > max_p:
max_p = p;
case p < min_p:
min_p = p;
}
switch(true) {
case u > max_u:
max_u = u;
case u < min_u:
min_u = u;
}
编辑:我接受了给出的有效答案,但我仍然不明白为什么会发生这样的事情。
假设您有一个具有 u
和 p
属性的对象数组(如果我没看错的话),这里有一个简单的函数可以为您提供 min/max您想要的值并为您省去使用 switch
and/or if
条件的问题。
var arr = [
{ p: 10, u: 101},
{ p: 11, u: 1},
{ p: 1, u: 3},
{ p: 2, u: 7},
{ p: 21, u: 1011},
{ p: 6, u: 2},
{ p: 2, u: 13}
]
function getInt(arr, key, type) {
return Math[type].apply(null, arr.map(function (el) {
return el[key];
}));
}
var min_p = getInt(arr, 'p', 'min'); // 1
var max_p = getInt(arr, 'p', 'max'); // 21
var min_u = getInt(arr, 'u', 'min'); // 1
var max_u = getInt(arr, 'u', 'max'); // 1001
我有大量具有 p 和 u 属性的特征。我想在数组中找到最小和最高的 p 和 u 并在循环中创建此 switch 语句。这在大约 99.9% 的时间内有效。然而。我有一个数据集,即使值分布均匀且平均值不相同,最大值和最小值也相同。难倒了。
switch(true) {
case p > max_p:
max_p = p;
case u > max_u:
max_u = u;
case p < min_p:
min_p = p;
case u < min_u:
min_u = u;
}
我 运行 通过 firebug 中的循环,可以看到如果您 < max_u,max_u 有时会更新。例如 u = 0.066, max_u = 0.088.
Pycharm 告诉我一个 fallthrough 问题,但该语句在我抛出的所有其他数据集上工作正常。
我可以将语句分成两部分。性能损失很小,但我想了解这是怎么发生的。
谢谢, 丹尼斯
编辑:
分成两个语句,数据集完全正常工作,语句中没有中断。
switch(true) {
case p > max_p:
max_p = p;
case p < min_p:
min_p = p;
}
switch(true) {
case u > max_u:
max_u = u;
case u < min_u:
min_u = u;
}
编辑:我接受了给出的有效答案,但我仍然不明白为什么会发生这样的事情。
假设您有一个具有 u
和 p
属性的对象数组(如果我没看错的话),这里有一个简单的函数可以为您提供 min/max您想要的值并为您省去使用 switch
and/or if
条件的问题。
var arr = [
{ p: 10, u: 101},
{ p: 11, u: 1},
{ p: 1, u: 3},
{ p: 2, u: 7},
{ p: 21, u: 1011},
{ p: 6, u: 2},
{ p: 2, u: 13}
]
function getInt(arr, key, type) {
return Math[type].apply(null, arr.map(function (el) {
return el[key];
}));
}
var min_p = getInt(arr, 'p', 'min'); // 1
var max_p = getInt(arr, 'p', 'max'); // 21
var min_u = getInt(arr, 'u', 'min'); // 1
var max_u = getInt(arr, 'u', 'max'); // 1001