for循环比较

简介: for循环比较

正文


  1. for 循环的效率问题比较


  1. 判断是否为空对象

// 兼容写法,JavaScript in 操作符可获取对象的属性;delete 操作符则删除属性
function isEmptyObj(obj) {
  for(var i in obj) {
    if(obj.hasOwnProperty(i)) {
      return false;
    }
  }
  return true;
}
// ES6 写法
function isEmptyObj(obj) {
  return Object.keys(obj).length == 0;
}


  1. 遍历效率:for > for-of > forEach > filter > map > for-in。虽然 for-in 遍历 Array 元素性能没有普通的for循环好,但对于 稀疏数组 的使用是极好的,尤其在数组长度很大的情况,如下:

var arr = [];
arr[99] = '哈哈';
arr[999] = '呵呵';
arr[9999] = '滚';
// 优化版 for 循环,只计算一次数组长度(共遍历了 10000 次)
for(let i=0, len=arr.length; i<len; i++) {
  if(i in {'99': '', '999': '', '9999': ''}) {
    console.log(true + ' ' + i);
  } else {
    console.log(false)
  }
}
// for-in(共遍历了 3 次)
for(let key in arr) {
  if(i in {'99': '', '999': '', '9999': ''}) {
    console.log(arr[key]);
  } 
}
// 两者遍历次数相差很大,这种情况下采用 for-in 是效率高很多。


  1. 循环方式的比较


遍历方式 描述 缺点
for 效率最高 改进版 for 循环:使用一个变量存储数组的长度,可以省去每次循环都去计算数组长度
for-of ES6 新增的方法,最简洁、最直接的遍历数组元素的方法,为了改进 forEachfor-in 缺陷而生的新方法。支持数组、对象、字符串、Map对象、Set对象遍历 不支持遍历普通对象,可以使用for-in代替
forEach 每执行一遍,都会执行 callback(item, index, array)。其中,item 是当前项,index 是当前索引项,array 是数组对象本身 不能 breakcontinue或者 return
filter 用来筛选符合某种条件的元素,将符合条件的元素重新组成一个新的数组
map 面向数组,不改变原数组。对于未被初始化被删除项(delete 操作符)数组的属性(array.name='小明')都不会执行 callback 函数
for-in for-in 是为普通对象设计的,for (var index in arr) { } 赋值给 index 的值不是索引值 1、2,而是字符串 '1','2'。 for-in 缺点更加明显,它不仅遍历数组中的元素,还会遍历自定义的属性,甚至原型链上的属性都被访问到。而且,遍历数组元素的顺序可能是随机的。


目录
相关文章
|
1月前
for循环是什么
for循环是什么
55 0
|
1月前
数组去重for循环和for循环嵌套
数组去重for循环和for循环嵌套
24 0
|
3月前
|
存储 程序员 C++
【C++小知识】基于范围的for循环(C++11)
【C++小知识】基于范围的for循环(C++11)
|
3月前
|
JavaScript 前端开发
for-in循环与for循环的区别
for-in循环与for循环的区别
33 0
|
5月前
|
编译器 索引
for循环和while循环
for循环和while循环
|
6月前
|
C语言
for循环
for循环
46 1
|
6月前
|
存储 C++ 容器
【C++11】 基于范围的for循环
【C++11】 基于范围的for循环
57 0
for循环、while循环和do while循环有什么不同
for循环、while循环和do while循环有什么不同
86 0
|
Python
for循环与if判断语句的运用
for循环与if判断语句的运用
111 0