javascript - OR 操作 ( || ) 与 inArray() 的性能

标签 javascript jquery performance

假设您要检查用户在表单域中输入的输入字符串。哪个是根据可能值列表检查此输入的最快方法?

以下示例使用 jQuery

第一种方法:使用||

if (input == "firstValue" || input == "secondValue" || ... ) {
    ...
}

第二种方法:使用inArray()

if ($.inArray(input, array) >= 0) {
    ...
}

这两种方法有什么显着差异吗?

最佳答案

您不想要最快但最易读的方式。对于超过 2 或 3 个值,这就是 in_array()(JavaScript:array.indexOf(value) >= 0)。

性能差异可以忽略不计——虽然函数调用和数组创建肯定有一些开销,但与文件访问、数据库访问、网络访问等昂贵的操作相比,这无关紧要。所以最终没有人会注意区别。

这是一个简短的 benchmark ,每个都有 100 万次迭代:

5.4829950332642 - in_array, the array is recreated everytime
2.9785749912262 - in_array, the array is created only once
0.64996600151062 - isset(), the array way created only once and then the values were turned to keys using array_flip()
2.0508298873901 - ||

所以,最快但仍然非常可读的方法就是这样。除非您只创建一次 $arr 并使用它多次 次,否则没有这个必要,您可以简单地使用 in_array()

$arr = array_flip(array('your', 'list', 'of', 'values'));
if(isset($arr[$value])) ...

如果您确实要求使用 JavaScript(在本例中去掉那些 $ 前缀!),最好的解决方案是使用 Array.indexOf():

['a', 'b', 'c'].indexOf(value) >= 0

但是,并非所有浏览器都已经支持 Array.indexOf(),因此您可能希望使用例如来自 Underscore.js 的函数:

_.contains(['a', 'b', 'c'], value)

jQuery 也有一个函数:

$.inArray(value, ['a', 'b', 'c'])

最快的方法是使用对象和 in 运算符,但对象定义的可读性不如数组定义:

value in {'a':0, 'b':0, 'c':0}

这是各种解决方案的 JSPerf 基准测试:http://jsperf.com/inarray-vs-or - 但同样,在大多数情况下,相当大的性能差异可以忽略不计,因为您不会在循环中执行数百万次代码。

关于javascript - OR 操作 ( || ) 与 inArray() 的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10479056/

相关文章:

javascript - 如何在滚动时使用 jQuery 显示/隐藏 div?

javascript - 将 fullcalendar.io 与 JSONP 结合使用

performance - 大字段名称和日期类型对Elasticsearch的性能影响

javascript - 无法使用 Javascript 根据键名合并两个不同的数组

javascript - Codeigniter:根据选择 ID 值更改数据表

javascript - 远程表单中的远程链接 - ajax 回调仅用于提交

mysql - 即使是最简单的查询也需要半秒才能访问任何表

windows - 为什么 CGIHTTPServer 在 Windows 中这么慢?

javascript - 在什么情况下 Enumerator 对象 (IE) 和 Iterator 对象 (Fx) 真正有用?

单击切换另一个元素的文本和 css 类上的 Jquery 按钮