Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Array.indexOf如何比Array.some更有效_Javascript_Arrays_Performance - Fatal编程技术网

Javascript Array.indexOf如何比Array.some更有效

Javascript Array.indexOf如何比Array.some更有效,javascript,arrays,performance,Javascript,Arrays,Performance,这个问题的灵感来自于对这个问题的不同回答: 用户想知道一种有效的方法来测试数组中是否存在一个或多个给定的整数。具体来说,给定一个数组和数字123、124和125,如何判断给定数组中是否存在一个或多个整数。提出了两种解决办法: 使用indexOf(): var数组=[1,2,3,4,5,6,7,8,9,10]; var exists=array.indexOf(123)!=-1 | |数组。indexOf(124)!=-1 | |数组。indexOf(125)!=-1. 或者,使用some():

这个问题的灵感来自于对这个问题的不同回答:

用户想知道一种有效的方法来测试数组中是否存在一个或多个给定的整数。具体来说,给定一个数组和数字
123
124
125
,如何判断给定数组中是否存在一个或多个整数。提出了两种解决办法:

使用
indexOf()

var数组=[1,2,3,4,5,6,7,8,9,10];
var exists=array.indexOf(123)!=-1 | |数组。indexOf(124)!=-1 | |数组。indexOf(125)!=-1.
或者,使用
some()

var数组=[1,2,3,4,5,6,7,8,9,10];
var exists=array.some(函数(项){
退货项目===123 | |项目===124 | |项目===125;
});
ECMA-262算法在找到成功匹配时都会短路,但我认为
some()
实现在没有匹配时会更快。然而,另一位用户指出,
indexOf()
解决方案


indexOf()
代码如何更高效,即使它必须在数组上迭代更多次?

问题是-您的问题高度依赖于标准本身,而不是标准是如何实现的

也就是说,不同发动机之间的结果可能不一致

一个非常明显的假设是,在某些引擎中的某段时间内“调用函数会有开销”,通过内联函数调用和其他一些棘手的优化,这种假设可能会得到缓解


总而言之:没有一个正确的答案,任何答案都不会引用ES实现+运行时详细信息(cpu指令/操作码,使用的优化)-只是一种推测。

我可以想象,因为
.indexOf
缺少调用函数的开销<代码>一些对于较大的数组可能更有效。使用不同的浏览器,并多次运行测试,我得到了不同的结果。在Chrome52上,test2更快。在Firefox50上,test1更快。不太确定一个比另一个快。