在 javascript 中使用模数和子字符串的最佳方式

Best way to use modulus and substring in javascript

我想获取年份的最后两个字符。例如输入= 2016 然后输出= 16

var year = 2016;

两种方法:

  1. 使用模数:year%100
  2. 使用子字符串:year.toString().substring(2,4)

就内存和计算成本而言,哪种方法最好用?

我不会对内存等成本感到恐慌 -(除非它明显减慢速度)

当你回来时,选择更简单、更容易识别的选项 - 这将是选项 2

这可能取决于 ECMAScript 引擎,但这是我根据 JavaScriptCore (JSC) 中的实现做出的猜测,它是 WebKit 的 JavaScript 实现。以下时间复杂度完全是我的猜测...

substring() 方法的时间复杂度似乎为 0(n),因为我相信它会根据 startend 参数循环遍历字符。

取模方法很可能是0(n/m)时间复杂度,其中n是被除数,m是被除数。将大数除以小数将需要更多的迭代。对于某些情况可能会有一些优化,比如除以 0、1 等。

在这种特殊情况下,使用 toString() 将年份转换为字符串的要求很可能会使取模方法的性能略有提高。任何收益都可能很小且无法察觉。

但是,还有一个更重要的因素需要考虑。在特殊情况下,取模方法可能会导致问题。例如,2000 年将得到 0。

> 2000%100
< 0

这可能会导致您的脚本出现问题。

最后,substring() 方法是更安全、性能几乎相同的解决方案。