对象和数组的循环遍历
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]

浙公网安备 33010602011771号