工作中,总是需要遍历数组。当数据越来越多时,处理时间会越来越长。因此,本文简单回顾一下时间复杂度,简单测试一下不同嵌套循环的处理时间。时间复杂度:定义:在计算机科学中,时间复杂度,又称时间复杂度,算法的时间复杂度是定性描述算法运行时间的函数。这是表示算法输入值的字符串长度的函数。时间复杂度通常用大O表示法表示,不包括该函数的低阶项和前导系数。使用这种方法时,时间复杂度可以说是渐近的,即考虑输入值的大小趋近于无穷大的情况。常用符号含义O(1)常数O(log(n))对数O(n)线性O(n2)平方O(2^n)指数在实际开发中,最常遇到的是O(n2),即双层for循环。我们来测试一下不同循环方式所花费的时间:首先创建两个数组a和b。for(leti=0;i<9999;i++){this.a.push({id:i,name:'a:'+i})}console.log("数组",this.a)for(letx=0;x<999;x++){this.b.push({id:x,name:'b:'+x})}console.log("barray",this.b)c数组Store,id相等的对象1,通过for循环嵌套for进行数据操作,constc=[]console.time('printfor-for');for(leti=0;i{this.b.forEach(m=>{if(n.id===m.id)c.push(m)})})console.log("carray",c)console.timeEnd('printforEach-forEach');此时花费的时间:printfor每个-forEach:2006.343994140625ms3,通过过滤器和包含进行数据操作,console.time('printfilter-includes');constids=this.a.map(m=>m.id)constc=this.b.filter(n=>ids.includes(n.id))console.log("carray",c)console.timeEnd('printfilter-includes');此时花费的时间:printfilter-includes:5.912841796875ms终于发现通过filter和includes进行数据操作的时间大大减少了,因为maphash表作为一个无序的Map,插入,查找的时间复杂度,而删除是O(1)的Map是ES6新的一种数据结构,用来表示键值对。对象也是一个键值对结构。Map是对object的一种增强。object的key只能是string,Map的key可以是任意值。Map的时间复杂度_JavaScriptES6的时间复杂度——Map的妙用