前端的几种遍历方式for, forin,filter,map,哪种效率高呢?

博客对前端几种遍历方式(for、forin、filter、map)的效率进行测试。在循环赋值和筛选符合条件数据的场景下,对大量数据进行测试。结果显示,filter和map方法在大量数据时效率高、写法简单;forin遍历数组慢,但遍历对象方便;少量数据时for循环可能用时更短。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前端的几种可用于遍历的方式(for, forin,filter,map),哪种效率高呢?

项目场景1:

循环将一个数组中的值赋给另一个数组


测试1:

代码:

//for
t = new Date().getTime()
var result1 = []
for (var i = 0; i < data.length; i++) {
    result1.push(data[i])
}
t1 = new Date().getTime()
console.log("for循环用时:",t1 - t)

//map
t2 = new Date().getTime()
var result2 = data.map(v => v)
t3 = new Date().getTime()
console.log("map用时:",t3 - t2)

//filter
t4 = new Date().getTime()
var result3 = data.filter(v => true)
t5 = new Date().getTime()
console.log("filter循环用时:",t5 - t4)

//forin
t6 = new Date().getTime()
for (var i in data) {
    // data[i]
}
t7 = new Date().getTime()
console.log("forin循环用时:",t7 - t6)

代码瞎写的,不看也罢,直接看结果:
现在是运行10000000条数据,单位(ms)
for循环用时: 393
map用时: 156
filter循环用时: 282
forin循环用时: 3718
…用时: 18 (写法: data1 = […data])


项目场景2:

将符合条件的数据赋值给另一个数组,假设有一半符合条件的数据


测试2:

//for
tt = new Date().getTime()
var result1 = []
for (var i = 0; i < data.length; i++) {
    if(data[i] > data.length / 2){
        result1.push(data[i])
    }
}
tt1 = new Date().getTime()
console.log("for循环用时:",tt1 - tt)

//filter
t4 = new Date().getTime()
var result3 = data.filter(v => v.id > data.length / 2)
t5 = new Date().getTime()
console.log("filter循环用时:",t5 - t4)

//forin
var result4 = []
t6 = new Date().getTime()
for (var i in data) {
    if(i > data.length / 2){
        result4.push(data[i])
    }
}
t7 = new Date().getTime()
console.log("forin循环用时:",t7 - t6)

运行结果:
for循环用时: 1086
filter循环用时: 327
forin循环用时: 4254


总结:

filter,map方法效率还是很高的,可能少量数据(10w一下)可能用时不如for循环,但是写法简单,可读性高,那十几毫秒的时差构不成威胁。尤其是在大量数据情况下,依旧可以高效运行。
forin的测试结果让我有点懵,竟然可以这么慢。但是不可否认的是它在遍历对象时还是挺方便的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值