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]