怎样快速而优雅地遍历 JavaScript 数组

怎样快速而优雅地遍历 JavaScript 数组,第1张

我们一般用循环来遍历数组,而循环一直是 JavaScript 性能问题的常见来源,有时循环用得不好会严重降低代码的运行速度。例如,遍历数组时,我们会很自然地写出下面这种代码:
// 未优化的代码1
var array = [0,1,2,3,4,5,6,7,8,9];
// for-in 循环
for (var val in array) {
fn(val);
}
还有这一种常见写法:
// 未优化的代码2
var array = [0,1,2,3,4,5,6,7,8,9];
// for 循环
for (var i=0; i < arraylength; i++) {
fn(array[i]);
}
这两个方法看上去似乎不错,而且语义上也很容易理解。但是这两个方法都有性能问题:
“未优化的代码1”中,for-in 需要分析出 array 的每个属性,这个 *** 作的性能开销很大,用在 key 已知的数组上是非常不划算的。所以尽量不要用 for-in,除非你不清楚要处理哪些属性,例如 JSON 对象这样的情况。
“未优化的代码2”中,循环每执行一次,都要检查一次 arraylength 的值,读属性要比读局部变量慢,尤其是当 array 里存放的都是 DOM 元素(像 array = documentgetElementByClassName("class");),因为每次读 arraylength 都要扫描一遍页面上 class="class" 的元素,速度更是慢得抓狂。
假如你的任务是从页面上 100 个复选框中,找出选中的复选框的 value,并把它们放入一个数组的话,在 IE 上可能得花上半秒才能完成。结果就是,用户在列表里选择了自己要的项目,点击提交后起码要过半秒才会有反应,直观感觉就是很卡。
我们绝不能接受这样的结果,所以我们需要加快循环终止条件的计算速度。先把数组的长度先查出来,存进一个局部变量,那么循环的速度将会大大提高:
// 快速的代码
var array = [0,1,2,3,4,5,6,7,8,9];
// for 循环
var length = arraylength;
for (var i=0; i < length; i++) {
fn(array[i]);
}
现在只需要读取一次 arraylength 的值,遍历数组的过程大大加快了。
不过我们还可以让它更快。如果循环终止条件不需要进行比较运算,那么循环的速度还可以更快:
// 最快的代码
var array = [0,1,2,3,4,5,6,7,8,9];
// for 循环
for (var i = arraylength; i--;) {
fn(array[i]);
}
把数组下标改成向 0 递减,循环终止条件只需要判断 i 是否为 0 就行了。因为循环增量和循环终止条件结合在一起,所以可以写成更简单的 while 循环:
// 最快且优雅的代码
var array = [0,1,2,3,4,5,6,7,8,9];
// while 循环
var i = arraylength;
while (i--) {
fn(array[i]);
}

Java一般有以下几种遍历数组元素的方法:
1根据下标遍历(即为传统的for循环遍历)
for(int i = 0; i < testlength; i++){systemoutprintln(test[i])}这种方法简单粗暴易使用
2foreach遍历
3迭代器遍历
4stream遍历

这个简单
1在for循环中没循环一次new一个JSONObject 把要传的单个对象放入其中
2再new一个JSONArray把刚才的JSONObject的对象放入其中
3以上就完成了一个循环网jSON数值中放入一个JSON对象的 *** 作。
4循环完了再将JSONArray的对象放入一个新的new JSONObject中
5最后用write方法写回jsp就行了。
这种应该是比较简单的方法了。

以某个结点依次进行访问,如此循环下去。

1、依次对树中每个结点均做一次且仅做一次访问,访问结点所做的 *** 作依赖于具体的应用问题。

2、按访问结点的先后次序将结点排列起来,就可分别得到树中所有结点的前序列表、中序列表和后序列表。相应的结点次序分别称为结点的前序、中序和后序。

3、深度优先遍历从某个顶点出发,首先访问这个顶点,然后找出刚访问这个结点的第一个未被访问的邻结点,然后再以此邻结点为顶点,继续找它的下一个新的顶点进行访问。

4、广度优先遍历从某个顶点出发,首先访问这个顶点,然后找出这个结点的所有未被访问的邻接点,访问完后再访问这些结点中第一个邻接点的所有结点,重复此方法,直到所有结点都被访问完为止。

一般人都会用for循环来遍历整个数组,然后挨个输出
例如:
int[] a = {1,2,3,4,5};
要将数组a打印出来,就是
for(int i = 0;i<alength;i++){
Systemoutprintln(a[i]);
}
这样就会挨个输出数组
但是还有一个方法,知道的人不多,就是ArraytoString(a);
只需要 Systemoutprintln(ArraytoString(a));
就会打印出[1,2,3,4,5]这种形式。

for循环就可以了
public static void main(String[] args) {
String[] temp = {"aa","bb","cc"};
for(int i=0;i<templength;i++){
Systemoutprintln(temp[i]);
}
}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/13247405.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-06-26
下一篇 2023-06-26

发表评论

登录后才能评论

评论列表(0条)

保存