在 javascript 中使用模数和子字符串的最佳方式
Best way to use modulus and substring in javascript
我想获取年份的最后两个字符。例如输入= 2016 然后输出= 16
var year = 2016;
两种方法:
- 使用模数:
year%100
- 使用子字符串:
year.toString().substring(2,4)
就内存和计算成本而言,哪种方法最好用?
我不会对内存等成本感到恐慌 -(除非它明显减慢速度)
当你回来时,选择更简单、更容易识别的选项 - 这将是选项 2
这可能取决于 ECMAScript 引擎,但这是我根据 JavaScriptCore (JSC) 中的实现做出的猜测,它是 WebKit 的 JavaScript 实现。以下时间复杂度完全是我的猜测...
substring()
方法的时间复杂度似乎为 0(n),因为我相信它会根据 start
和 end
参数循环遍历字符。
取模方法很可能是0(n/m)时间复杂度,其中n
是被除数,m
是被除数。将大数除以小数将需要更多的迭代。对于某些情况可能会有一些优化,比如除以 0、1 等。
在这种特殊情况下,使用 toString()
将年份转换为字符串的要求很可能会使取模方法的性能略有提高。任何收益都可能很小且无法察觉。
但是,还有一个更重要的因素需要考虑。在特殊情况下,取模方法可能会导致问题。例如,2000 年将得到 0。
> 2000%100
< 0
这可能会导致您的脚本出现问题。
最后,substring()
方法是更安全、性能几乎相同的解决方案。
我想获取年份的最后两个字符。例如输入= 2016 然后输出= 16
var year = 2016;
两种方法:
- 使用模数:
year%100
- 使用子字符串:
year.toString().substring(2,4)
就内存和计算成本而言,哪种方法最好用?
我不会对内存等成本感到恐慌 -(除非它明显减慢速度)
当你回来时,选择更简单、更容易识别的选项 - 这将是选项 2
这可能取决于 ECMAScript 引擎,但这是我根据 JavaScriptCore (JSC) 中的实现做出的猜测,它是 WebKit 的 JavaScript 实现。以下时间复杂度完全是我的猜测...
substring()
方法的时间复杂度似乎为 0(n),因为我相信它会根据 start
和 end
参数循环遍历字符。
取模方法很可能是0(n/m)时间复杂度,其中n
是被除数,m
是被除数。将大数除以小数将需要更多的迭代。对于某些情况可能会有一些优化,比如除以 0、1 等。
在这种特殊情况下,使用 toString()
将年份转换为字符串的要求很可能会使取模方法的性能略有提高。任何收益都可能很小且无法察觉。
但是,还有一个更重要的因素需要考虑。在特殊情况下,取模方法可能会导致问题。例如,2000 年将得到 0。
> 2000%100
< 0
这可能会导致您的脚本出现问题。
最后,substring()
方法是更安全、性能几乎相同的解决方案。