对象和数组的循环遍历
1. 对象的遍历
1 let obj = {'0' : 'a', '1' : 'b', '2' : 'c' };
- Object.keys()(输入object,返回array)
1 Object.keys(obj).forEach( key =>{ 2 console.log(key, obj[key]); // 0 a, 1 b, 2 c 3 });
- for ... in ...
1 for ( let i in obj ) { 2 console.log(i, ":", obj[i]); // 0 a, 1 b, 2 c
3 }
2. 数组的遍历
1 var arr= [1,2,3,4];
- forEach(循环无法停止,会一直进行到底):
- 与
map
方法很相似,也是对数组的所有成员依次执行参数函数。但是,forEach
方法不返回值,只用来操作数据。这就是说,如果数组遍历的目的是为了得到返回值,那么使用map
方法,否则使用forEach
方法。 forEach
的用法与map
方法一致,参数是一个函数,该函数同样接受三个参数:当前值、当前位置、整个数组
1 arr.forEach( function(val, index) { 2 console.log(val, index); // 1 0, 2 1, 3 2, 4 3 3 });
1 arr.forEach((val, index) =>{ 2 console.log(val, index); // 1 0, 2 1, 3 2, 4 3
3 });
1 function log(element, index, array){ 2 console.log('['+index+']=' + element);//"[0]=2" "[1]=5" "[2]=9" 3 } 4 [2,5,9].forEach(log);
- 上面代码中,
forEach
遍历数组不是为了得到返回值,而是为了在屏幕输出内容,所以不必使用map
方法 forEach
方法也可以接受第二个参数,绑定参数函数的this
变量
1 var out = []; 2 3 [1, 2, 3].forEach(function(elem) { 4 this.push(elem * elem); 5 }, out); 6 7 console.log(out); //[1,4,9]
- 上面代码中,空数组
out
是forEach
方法的第二个参数,结果,回调函数内部的this
关键字就指向out
forEach
方法无法中断执行,总是会将所有成员遍历完。如果希望符合某种条件时,就中断遍历,要使用for
循环
1 var arr = [1, 2, 3]; 2 for (var i = 0; i < arr.length; i++) { 3 if (arr[i] === 2) break; 4 console.log(arr[i]); //1 5 }
- 上面代码中,执行到数组的第二个成员时,就会中断执行。
forEach
方法做不到这一点 forEach
方法也会跳过数组的空位
1 var log = function (n) { 2 console.log(n + 1); 3 }; 4 5 [1, undefined, 2].forEach(log); // 2 NaN 3 6 [1, null, 2].forEach(log); // 2 1 3 7 [1, , 2].forEach(log); // 2 3
- 上面代码中,
forEach
方法不会跳过undefined
和null
,但会跳过空位 - for
1 for ( let i = 0 ; i < arr.length; i++){ 2 console.log(arr[i]); // 1 2 3 4 3 }
- for .. in ...
1 for ( let i in arr ) { 2 console.log(i, ":", arr[i]); // 0:1, 1:2, 2:3, 3:4 3 }
- for .. of ...
1 for ( let value of arr ) { 2 console.log(value); // 1 2 3 4 3 }
- map
1 let arr1 = arr. map((n) =>{ 2 return n+1 3 }) 4 console.log(arr1); // [ 2, 3, 4, 5 ]
- filter
1 let arr2 = arr.filter(item =>{ 2 return (item === 1 ) 3 }) 4 console.log(arr2); //[1]
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理