我想获得年份的最后两个字符。例如输入= 2016然后输出= 16在javascript中使用模数和子串的最佳方法
var year = 2016;
两种办法:
- 使用弹性模量:
year%100
- 使用子串:
year.toString().substring(2,4)
哪一个是要使用的最佳方法中,在内存和计算成本?
我想获得年份的最后两个字符。例如输入= 2016然后输出= 16在javascript中使用模数和子串的最佳方法
var year = 2016;
两种办法:
year%100
year.toString().substring(2,4)
哪一个是要使用的最佳方法中,在内存和计算成本?
这可能取决于ECMAScript引擎,但这里是我的基于查看JavaScriptCore(JSC)实现的猜测,这是WebKit的JavaScript实现。下面的时间复杂度是在我的部分猜测总...
的substring()
方法似乎有0(n)的时间复杂度,因为我相信它遍历基础上,start
和end
参数的字符。
模数法很可能是0(n/m)的时间复杂度,其中n
是被分割的数字,m
是用于除以的数字。大数除以小数将需要更多迭代。有可能是某些情况下一些优化,比如0,1分,等
在这种特殊情况下,到今年转换为使用toString()
最有可能的字符串的要求使得模方法稍微更好的性能。任何收益可能都很小,无法察觉。
但是,还有一个更重要的因素需要考虑。模数方法可能会在特殊情况下导致问题。例如,2000年的结果为0.
> 2000%100
< 0
这可能会导致您的脚本出现问题。
最后,substring()
方法是更安全,几乎相同的高性能解决方案。
我不会惊慌内存等成本 - (除非它显然会减慢速度)
只是什么是简单和容易,当你回到它认识到去 - 这将是选项2
感谢您的回复。我想补充一点。在选项2中,对于单个事物有两个操作,而在第一个中只有一个操作。就更好的编程而言,这是否是一个问题? –
公平点,但我仍然说它是最不重要的 - 也见布雷特的答案 –
每个方法耗时多久? – RomanPerekhrest