JavaScript几种循环速度及使用场景


一、for(正序和倒叙)

const million = 1000000; 
const arr = Array(million);
for (let i = arr.length; i > 0; i--) {} // for(倒序) 	:- 1.5ms
for (let i = 0; i < arr.length; i++) {} // for          :- 1.6ms

for倒叙略快。
for(倒序)只需要计算一次起始变量 let i = arr.length,而在正序的 for 循环中,它在每次变量增加后都会检查条件 i<arr.length。
数据量小时差别不大。如数据量达到十亿、百亿级时有明显差距

二、forEach / some

const arr = [1,2,3,4,5]
arr.forEach((item,index)=>{
	console.log(item,index) 
	//1 0,
	//2 1
	//3 2
	//4 3
	//5 4
})

forEach不能结束和跳过循环;

三、for…of(es6)

const arr = [2, 3, 4];
const str = 'csdn';
for (let i of arr) {
   console.log(i); // 输出 2, 3, 4
}
for (let i of str) {
   console.log(i); // 输出 'c', 's', 'd', 'n'
}
//循环终止和跳出 
let arr = ['apple', 'orange']
for(let i of arr) {
    if(i == 'apple') {
        continue;//跳出当前的循环,并不会终止;
    }
    return false;//终止循环 如果for循环中嵌套了for循环也将会终止
    break;//用于跳出最近的一次循环,如果for循环中嵌套了for循环嵌套的循环将会继续执行
}

对一个可迭代的对象(例如 array、map、set、string 等)创建一个循环,特点:可读性好

四、for…in

let arr= [4, 5, 6];
for (let i in arr) {
   console.log(i); // '0', '1', '2'
}

循环遍历对象的属性

五、其他

while

do…while

map

[1, 2, 3].map(function(elem, index, arr) { 
    return elem * index; 
}); 
// [0, 2, 6]

filter()

some()

some()只要有一个是true,便返回true

every()

every()只要有一个是false,便返回false.

reduce(),reduceRight()

[1, 2, 3, 4, 5].reduce(function (a, b) {
  console.log(a, b);
  return a + b;
})
// 1 2
// 3 3
// 6 4
// 10 5
//最后结果:15

Object.keys

var obj = {
  p1: 123,
  p2: 456
};
Object.keys(obj) // ["p1", "p2"]

总结

map(环和filter()循环都会跳过空位,for和while不会

var f = function (n) { 
    return 'a' 
}; 
 
[1, undefined, 2].map(f) // ["a", "a", "a"] 
[1, null, 2].map(f) // ["a", "a", "a"]
[1, , 2].map(f) // ["a", , "a"]
 

for 最快,但可读性比较差
forEach 比较快,能够控制内容,不可结束和跳过循环
for…of 常用,可读性好
for…in 比较慢

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值