- for(let i=0;i<array.length;i++)
- for(let i=0;i<array.length;++i)
- for(let i=0,len=array.length;i<len;++i)
- for(let i=array.length-1;i>=0;–i)
- for(let i=array.length-1;i>-1;–i)
0 投票者
0 投票者
编译器会优化掉的 把length改成变量会好些 不用二级访问
就喜欢抠细节,选一个吧
我猜速度一样 
面试这么卷的话 肯定要挨骂
点错了…
怎麽看都是for(let i = array.length-1;i > -1;–i) 和 for(let i = array.length-1;i >= 0;–i)
没有length的二级访问, 然后语法够短, 像js这种基于字符串编译的有明显优势
如果与顺序无关,我会用第4个,与顺序有关,我会用第3个,长度会变化,我会用第1个(非单纯的移除,否则还是用第4个)
我选第5个,,, 是>-1 而不是>=0
这么测效率没意义,你调换一下1234的顺序,结果会变化的。
赞同 
其实效率差不多,选择2更常规一些
数值有变化,但是大小基本没有变化,1>2>3≈4≈5
那基本符合预期,赞 
这是在研究回字有几种写法吗 
顺便看看多少人上班在摸鱼 
小白才会考虑这点性能,老油条只在乎哪个方案代码最短最少。a.map(),a.filter(),a.forEach()。。。。
其实大部分情况下循环次数都不会太多,运算量也差别不大,这里只是讨论个理论最优方案
++i效率比i++高,首先排除1
2反复取array.length,循环次数多的话效率会损耗明显,排除2
4和5差异是>=和>,循环多次的话>开销更小,5胜出
剩下3和5,5省略了临时变量,而且循环中即便删除当前元素也不用处理下标移位(因为是向前遍历的)
综合来说,5是最优方案,只有必须正向遍历才用3,其他都是渣渣
如果是 cpp 编译器会优化的 特别是不读值的情况下 ++i和i++一致 js引擎太多 不确定 但v8应该差异不大