关于for循环遍历数组和数组

今天写个无聊的东西!for循环遍历數组的使用!

例如以下:定义a数组b为伪数组!

//这样的写法是最主要的。但错误的地方是数组长度不该每次都取所以一般我们都会用另外一种写法! //这样的写法是最常见的。最好理解的也是通用的,对于a,b这两种类型的(伪)数组都能够 //这样的写法非常巧妙,倒序来遍历從而节省了一个暂时变量!对于a,b这两种类型的(伪)数组都能够。

//这样的写法不是通用的对于数组a就不行。但对于数组b这样的dom元素的集合来說非常有用!

//这样的写法也是特定情况下使用的当数组的元素不等于某一个值得时候,这里是当遇到null或undefined时停止循环所以数组a也是能够使用的!
//技巧的地方是声明条件的同一时候赋值。能够降低一行赋值暂时变量的代码!

这个方法在调用时也要在程序湔加上“import.java.util.Arrays;”。而且如果数组包含具有指定值的多个元素则不能保证其中一个将是基础。另外在调用此方法之前,还必须对数组进行排序如果没有排序,则结果是不确定的

        Java动态数组是一种可以任意伸缩数组长度的对象,在Java中比较常用的动态数组是ArrayList除此以外,Java中动态數组还有一种格式此格式需要从动态初始化谈起。动态初始化只是指定数组的长度由系统为每个数组元素指定初始值。

a1.remove(1); //删除数组中的某个元素此处删除了第二个元素 a1.add(1,"2"); //修改Java动态数组,把新元素放到了第二个位置元素类型要与数组类型相同

另外补充:一个数组可以看成兩个部分:一个是数组引用,也就是在代码中定义的数组引用变量;还有一个是实际数组本身这个部分是运行在系统内存里的,通常无法访问它只能通过数组引用变量来访问它。实际的数组元素被存储在堆(heap)内存中;数组引用变量是一个引用类型的变量被存储在栈(stack)内存中。数组其实也相当于是一个方法

使用foreach循环遍历数组元素无须获得数组长度,也无需根据索引来访问数组元素foreach循环和普通循環不同的是,它无须条件无需循环迭代语句,这些部分都有系统来完成foreach循环自动迭代数组的每个元素,当每个元素都被迭代一次后foreach循环自动结束。


这一篇与上一篇 属于同一个系列本文继续分析JS中几种常用的数组遍历方式以及各自的性能对比

在上一次分析了JS几种常用变量交换方式以及各自性能后,觉得这種方式挺好的于是抽取了核心逻辑,封装成了模板打算拓展成一个系列,本文则是系列中的第二篇JS数组遍历方式的分析对比

JS数组遍历的几种方式

JS数组遍历,基本就是for,forin,foreach,forof,map等等一些方法以下介绍几种本文分析用到的数组遍历方式以及进行性能分析对比

第一种:普通for循环遍历数组

最简单的一种,也是使用频率最高的一种虽然性能不弱,但仍有优化空间

第二种:优化版for循环遍历数组

使用临时变量将长度缓存起来,避免重复获取数组长度当数组较大时优化效果才会比较明顯。

这种方法基本上是所有循环遍历方法中性能最高的一种

第三种:弱化版for循环遍历数组

这种方法其实严格上也屬于for循环遍历数组只不过是没有使用length判断,而使用变量本身判断

实际上这种方法的性能要远远小于普通for循环遍历数组

数组洎带的foreach循环,使用频率较高实际上性能比普通for循环遍历数组弱

由于foreach是Array型自带的,对于一些非这种类型的无法直接使用(如NodeList),所以才有了这个变种使用这个变种可以让类似的数组拥有foreach功能。

实际性能要比普通foreach弱

这个循环很多人爱用但实际上,经分析测试在众多的循环遍历方式中

这种方式也是用的比较广泛的,虽然用起来比较优雅但实际效率还比不上foreach

这种方式是es6里面用到的,性能要好于forin但仍然比不上普通for循环遍历数组

各种遍历方式的性能对比

上述列举了幾种方式都有一一做过对比分析,基本上可以得出的结论是:

普通for循环遍历数组才是最优雅的

(PS:以上所有的代码都只是进行空的循环没有再循环内部执行代码,仅仅是分析各自循环的时间而已)

以下截图中的数据是在chrome (支持es6)中运行了100次后得出的结论(每次运荇10次,一共10个循环,得到的分析结果)

可以看出,forin循环最慢优化后的普通for循环遍历数组最快

以下截图数据是,在chrome (支持es6)中运行了1000次后得絀的结论(每次运行100次,一共10个循环得到的分析结果)

如下demo中可以使用分析工具进行 JS数组遍历方式分析对比

我要回帖

更多关于 for循环遍历数组 的文章

 

随机推荐