在工作中,总是需要对数组进行循环处理,当数据越来越多的时候,就会导致处理的时间比较长。所以,这篇文章简单的重温一下时间复杂度,以及简单测试一下,不同嵌套循环的处理时间。
时间复杂度:
定义:在计算机科学中,时间复杂性,又称时间复杂度,算法的时间复杂度是一个函数,它定性描述该算法的运行时间。这是一个代表算法输入值的字符串的长度的函数。时间复杂度常用大O符号表述,不包括这个函数的低阶项和首项系数。使用这种方式时,时间复杂度可被称为是渐近的,亦即考察输入值大小趋近无穷时的情况。
常用的
符号 | 含义 |
---|---|
O(1) | 常数 |
O(log(n)) | 对数 |
O(n) | 线性 |
O(n2) | 平方 |
O(2^n) | 指数 |
O(n2)
,也就是双层for 循环。下面进行测试一下不同循环方式所花费的时间:
先创建 a, b 两个数组。
for (let i = 0;
i < 9999;
i++) {
this.a.push({ id: i, name: 'a:' + i })
}
console.log("a数组",this.a)
for (let x = 0;
x < 999;
x++) {
this.b.push({ id: x, name: 'b:' +x })
}
console.log("b数组",this.b)
c数组存放, 他们 id 相等的对象
1,通过 for 循环嵌套 for 进行数据操作,
const c = []
console.time('打印 for - for');
for(let i = 0;
i< this.a.length;
i++){
for(let x = 0;
x< this.b.length;
x++){
if (this.a[i].id === this.b[x].id){
c.push(this.a[i])
}
}
}
console.log("c数组",c)
console.timeEnd('打印 for - for');
此时所花费的时间:
打印 for - for: 120012.27807617188 ms
文章图片
2,通过 forEach 循环嵌套 forEach 进行数据操作,
const c = []
console.time('打印 forEach - forEach');
this.a.forEach( n => {
this.b.forEach(m => {
if (n.id === m.id) c.push(m)
})
})
console.log("c数组",c)
console.timeEnd('打印 forEach - forEach');
此时所花费的时间:
打印 forEach - forEach: 2006.343994140625 ms
文章图片
3,通过 filter 和 includes 进行数据操作,
console.time('打印 filter - includes');
const ids = this.a.map(m => m.id)
const c = this.b.filter(n => ids.includes(n.id))
console.log("c数组",c)
console.timeEnd('打印 filter - includes');
此时所花费的时间:
打印 filter - includes: 5.912841796875 ms
文章图片
最后发现,通过 filter 和 includes 进行数据操作,时间大大减少了,是因为 使用了
map
哈希表为无序 Map,插入、查找、删除的时间复杂度均为O(1)
Map 是 ES6 新出的一种数据结构,用来表示键值对,object也是键值对结构,Map算是对object的一种加强
object的键只能为string,Map的键可以为任意值
【js——for循环时间复杂度】参考:
双层循环遍历 减少时间复杂度
map的时间复杂度_JavaScript ES6—Map的妙用
推荐阅读
- 操作系统|[译]从内部了解现代浏览器(1)
- web网页模板|如此优秀的JS轮播图,写完老师都沉默了
- JavaScript|vue 基于axios封装request接口请求——request.js文件
- vue.js|vue中使用axios封装成request使用
- JavaScript|JavaScript: BOM对象 和 DOM 对象的增删改查
- JavaScript|JavaScript — 初识数组、数组字面量和方法、forEach、数组的遍历
- JavaScript|JavaScript — call()和apply()、Date对象、Math、包装类、字符串的方法
- JavaScript|JavaScript之DOM增删改查(重点)
- javascript|vue使用js-xlsx导出excel,可修改格子样式,例如背景颜色、字体大小、列宽等
- javascript|javascript中的数据类型转换