1.Array类型的遍历:
Array类型可以采用下标的方法进行遍历,也可以采用for ...of,for... in,forEach方法进行遍历。
let arr=['兄','弟','你','真','帅'];
let len=arr.length;
for (let i=0;i<len;i++)
{
console.log(arr[i]);
}
for(let i in arr){
console.log(i);//输出的是索引,不是数组元素
console.log(arr[i]); //输出的是数组元素
}
for(let i of arr){
console.log(i);//输出的是数组元素
}
arr.forEach((item, idnex, array) => {
console.log(item);//遍历元素
console.log(idnex);//遍历索引
console.log(array);//遍历数组
});
注意for of和for in遍历中i所代表的含义是不一样的。
Array可以采用下标进行循环遍历,Map和Set就无法使用下标。为了统一集合类型,ES6标准引入了iterable类型,Array、Map、Set都属于iterable类型。而对象Object不具备Symbol.iterator属性,所以无法被for ...of遍历。
故Array、Map、Set均可使用for ...of遍历。
2.Map、Set的for ...of遍历:
let map1 = new Map([[ 'ipad', 3999 ],[ 'ipad', 3999 ],
[ 'shoes', 999 ],[ 'phone', 99 ],[ 'pen', 9 ]])
console.log(map1);
for (let i of map1){
console.log(i);//[ 'ipad', 3999 ] [ 'ipad', 3999 ]
//[ 'shoes', 999 ] [ 'phone', 99 ] [ 'pen', 9 ]
console.log(i instanceof Array);//true
}
let set =new Set([11,22,33,44,55,55,66]);
for(let i of set){
console.log(i+=1);//12 23 34 45 56 67
}
for (let i of map1)中i的结构为数组。
3.set和map的forEach遍历:
map1.forEach((value,key,map) => {
value+=1;
console.log(value);//4000 1000 100 10
});
//Map的回调函数参数依次为value、key和map本身
set.forEach((element,sameelement,set) => {
console.log(element); //11 22 33 44 55 66
});
//Set与Array类似,但Set没有索引,因此回调函数的前两个参数都是元素本身
map1和set定义见上一段代码。
4.解构后使用数组的遍历方法:
console.log([...map1]);
for(let i in [...map1]){
console.log([...map1][i]);
}
for (let i=0;i<[...map1].length;i++){
console.log([...map1][i]);
}