怎么能数组.indexOf比Array.some更有效
How can Array.indexOf be more efficient than Array.some
这个问题的灵感来自这个问题的竞争答案:indexOf with multiple arguments
用户想知道一种有效的方法来测试数组中是否存在一个或多个给定的整数。具体来说,给定一个数组和数字123
, 124
和125
,您如何判断给定数组中是否存在这些整数中的一个或多个。有两种解决方案:
使用indexOf()
:
var array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
var exists = array.indexOf(123) !== -1 || array.indexOf(124) !== -1 || array.indexOf(125) !== -1;
或者,使用some()
:
var array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
var exists = array.some(function(item) {
return item === 123 || item === 124 || item === 125;
});
indexOf()
和some()
的ECMA-262算法在找到成功匹配时都短路了,但我本以为some()
在没有匹配时实现会更快。然而,另一位用户指出indexOf()
解决方案更快。
indexOf()
代码如何更有效,即使它必须在数组上迭代更多次?
问题是——你的问题高度依赖于标准本身,而不是标准如何实现。
表示,不同引擎之间的结果可能不一致。
在某些引擎中,有时"调用函数有开销"这一非常明显的假设可能会通过内联函数调用和其他一些棘手的优化来缓解。
总结:没有单一的正确答案,任何答案都不会使用任何引用ES实现+运行时细节(cpu指令/操作码,使用的优化)-只是一个猜测。
相关文章:
- 如何有效地将游戏数据存储在URL查询字符串中
- 如何使用Node.js最有效地解析网页
- jquery代码在Mozilla中有效,但在其他浏览器上无效
- 有效形式-始终只显示1个错误[角度]
- Javascript袖珍参考,第121页:这是怎么回事;猴子补丁”;方法应该有效
- 单击仅在第二次单击后有效
- 什么'是在asp.net MVC中将本地化的resources.resx文件转换为javascript文件的有效
- 为什么自我执行匿名有效
- D3.js生成有效的SVG,但不显示任何内容
- 如何在AngularJS中有效地检查日期是否有效
- 为什么不是'我的函数在解析云代码中工作吗?当我在Angular和Express中测试时,它是有效的
- 滚动在Chrome中有效,但在Firefox或IE中无效
- 有效地获取两个区间之间的随机整数
- Rails将JavaScript对象存储到Model的有效方式
- Javascript XMLHttpRequest——只有第一个POST请求有效
- 使用条件语句,使 jquery fadeIn/fadeOut 仅在视口 >= 480px 时才有效
- 有效负载字节与实际字节不同
- 如何在three.js中有效地使用TraingleStripDrawMode
- 外部链接的Javascript文件赢得't执行,但函数有效
- 怎么能数组.indexOf比Array.some更有效