三种javascript数组搜索的效率对比

1.背景

在写js的时候经常有查询一个字符串数组中是否存在某个值的需求,可以用for in或者for i++或者直接arr.join(‘,‘).indexOf()三种方式。。最后一种代码最少因此用的最多,但是效率如何自己也没有把握。。所以今天就特地拿来测试一下。

2.测试代码

//构造一个数组
var arr=[];
for(var i=0;i<=1000000;i++){
	arr.push(‘abcdefghigk‘+i);
}
var v=‘abcdefghigk1000000‘;//需要比较的值就是最后一个
console.log(‘for in ‘);//for in方式查询
console.time(‘arr‘);
var find =false;
for(var i in arr){
	if(arr[i]===v){
		find=true;
		break;
	}
}
console.log(find);
console.timeEnd(‘arr‘);
console.log(‘for i++‘);//for i++方式查询
console.time(‘arr‘);
var find =false;
for(var i=0,len=arr.length;i<len;i++){
	if(arr[i]===v){
		find=true;
		break;
	}
}
console.log(find);
console.timeEnd(‘arr‘);
console.log(‘string‘);//join方式查询
console.time(‘arr‘);
console.log((‘,‘+arr.join(‘,‘)+‘,‘).indexOf(‘,‘+v+‘,‘));
console.timeEnd(‘arr‘);

3.测试结果

直接在chrome控制台上运行,查看结果

4.总结

这个测试结果就一目了然了啊,

string>>for in>for i++

普通的for循环是稍慢于for in的,可能内部的runtime做的事情越多,效率越快。。而join和indexOf都是内置方法,所以速度就特别快了。

时间: 2024-11-07 03:04:56

三种javascript数组搜索的效率对比的相关文章

OpenCL中三种内存创建image的效率对比

第一种:使用ION: cl_mem_ion_host_ptr ion_host_ptr1; ion_host_ptr1.ext_host_ptr.allocation_type = CL_MEM_ION_HOST_PTR_QCOM; ion_host_ptr1.ext_host_ptr.host_cache_policy = CL_MEM_HOST_UNCACHED_QCOM; ion_host_ptr1.ion_filedesc = fd_data.fd; ion_host_ptr1.ion_

C#三种字符串拼接方法的效率对比

C#字符串拼接的方法常用的有:StringBuilder.+.string.Format.List<string>.使用情况不同,效率不同. 1.+的方式 string sql = "update tableName set int1=" + int1.ToString() + ",int2=" + int2.ToString() + ",int3=" + int3.ToString() + " where id="

epoll函数及三种I/O复用函数的对比

epoll函数 #include <sys/epoll.h>int epoll_create(int size)int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event)int epoll_wait(int epfd,struct epoll_event * events,int maxevents,int timeout) Linux I/O多路复用技术在比较多的TCP网络服务器中有使用,即比较多的用到select函数

JavaScript 数组遍历方法的对比

前言 JavaScript 发展至今已经发展出多种数组的循环遍历的方法,不同的遍历方法运行起来那个比较快,不同循环方法使用在那些场景,下面将进行比较: 各种数组遍历的方法 for 语句 代码: var arr = [1,2,4,6] for(var i = 0, len = arr.length; i < len; i++){ console.log(arr[i]) } 复制代码 这是标准for循环的写法也是最传统的语句,字符串也支持,定义一个变量i作为索引,以跟踪访问的位置,len是数组的长度

一个在字符串中查找多个关键字的函数strstrs(三种不同算法实现及效率分析)

平时项目中有时需要用到在字符串中搜索两个或更多的关键字的情景.例如:将字符串"ab|cd#ef|"按竖线或者井号做分隔 如果是大项目,一般会采用正则表达式做处理.但有时写个小程序,不想因此引进一个正则库,所以我自己写了一个支持多关键字版本的字符串查找函数strstrs 函数说明: 1 #include <stdio.h> 2 #include <windows.h> 3 4 #ifndef IN 5 #define IN 6 #endif 7 8 //函数说明:

VMware虚拟化三种备份和恢复方法的对比分析

服务器虚拟化,尤其是VMware形式的服务器虚拟化使IT人员获益良多,这么说一点也不为过.据我们所见,服务器虚拟化能解决服务器扩张.资源消耗.服务器扩张.能源消耗.高可用性等相关问题.服务器虚拟化也使我们有更多的时间解决其它的迫切问题,如企业资源预案升级.存储项目再三迁移或者为什么我的青蛙总不回家的问题.尽管VMware提供封装技术和抽象技术,使我们受益匪浅,但数据保护领域发生的基本变革也带来了各项挑战.即使出现了VMware虚拟化,备份人员依然是牢骚最多的IT人员.最大的挑战在于保证数据的一致

分析三种判断数组的方法

1. obj instanceof Array 我们都知道instanceof是用来判断对象的类型的,并且所有的对象 instanceof Object结果都是true 内部机制是通过判断对象的原型链中是否能找到同类型的prototype 其原理是一层一层查找__proto__,如果和constructor.prototype的值相等则返回true,否则返回false 根据这一点可得,如果想判断一个对象是否是数组,需要判断这个对象的原型链上是否存在Array的原型: console.log([]

JavaScript定义数组的三种方式(new Array(),new Array(&#39;x&#39;,&#39;y&#39;),[&#39;x&#39;,&#39;y&#39;])

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-

javascript数组去重 - 效率测试

数组去重,前端面试酷爱的问题,问题简单而又能看出一个程序员对计算机程序执行过程的理解如何. 数组去重的方法有很多,到底哪种是最理想的,我不清楚.于是我测试了下数组去重的效率.测试二十万个数据,随着数据越多效率很明显的就体验了出来. 以下是我针对网上三种高效率方法总结与效率测试,不喜勿喷O(∩_∩)O~~ 数组去重法1: 1 Array.prototype.unique1 = function(){ 2 console.time("数组去重法1"); //记录开始执行的时间 3 var