gpt4 book ai didi

javascript - 将数字四舍五入为 3 的倍数

转载 作者:行者123 更新时间:2023-11-28 12:23:27 25 4
gpt4 key购买 nike

我现在的情况需要执行以下操作:

if n = 0 or 1 or 2; return 0;
if n = 3 or 4 or 5; return 3;
if n = 6 or 7 or 8; return 6;
if n >= 9; return 9

我有以下代码,工作正常

var adjustNumberOfProducts = function(number) {
var output = 0;
switch(number) {
case 0:
case 1:
case 2:
output = 0;
break;
case 3:
case 4:
case 5:
output = 3;
break;
case 6:
case 7:
case 8:
output = 6;
break;
default:
output = 9
break;
}
return output;
}

我想知道是否有更优化(更快执行)的方法来做到这一点。

最佳答案

如果您追求原始速度,那么某种查找可能就是您想要的;但是,通常的规则适用:使用分析器。

我想到的查找是错误的:

// DOES NOT WORK: 0 is falsy in JavaScript
var adjustNumberOfProducts = function (number) {
return [0, 0, 0, 3, 3, 3, 6, 6, 6][number] || 9
}

但是由于 0 在 JavaScript 中是假的,我们可以使用 T. J. Crowder 的(有趣的,不完全严肃的)“调整”:

var adjustNumberOfProducts = function (number) {
return ([1, 1, 1, 4, 4, 4, 7, 7, 7][number] || 10) - 1
}

这会造成巨大的可读性损失,许多程序员在实际代码中看到这一点时会彻底畏缩(我认为“我的眼睛!”可能是现代的 react 。)

我认为需要进行 jsperf 测试来将这种邪恶的方法与 switch 语句和 Math.min(number - (number% 3),9) 技术映射起来。我会使用一些 asm.js 技术,例如与零进行按位或运算来强制进行整数数学运算,看看这是否有帮助(尽管可能没有)。

关于javascript - 将数字四舍五入为 3 的倍数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33351230/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com