1、对象遍历数组
ES6一共有5种方法能够遍历对象的属性。数据结构
1、for-in函数
在使用for-in循环时,返回的是全部可以经过对象访问的、可枚举的(enumerated)属性,其中既包括存在于实例中的属性,也包括存在于原型中的属性,不含Symbol属性。屏蔽了原型中不可枚举属性(即设置了[[DontEnum]]标记的属性)的实例属性也会在for-in循环中返回,由于规定,全部开发人员定义的属性都是可枚举的——只有IE除外。测试
2、Object.keys(obj)spa
Object.keys()方法取得对象上全部可枚举的实例属性。该方法接收一个对象为参数,返回一个包含全部可枚举属性的字符串数组,不含Symbol属性。code
3、Object.getOwnPropertyNames(obj)对象
Object.getOwnPropertyNames()获得全部实例属性,不管是否可枚举,不含Symbol属性。blog
4、Object.getOwnPropertySymbols(obj)排序
Object.getOwnPropertySymbols(obj)返回一个数组,包含对象自身的全部 Symbol 类型的属性(不包括继承的属性)继承
5、Reflect.ownKeys(obj)
Reflect.ownKeys(obj)方法用于返回对象的全部实例属性,基本等同于Object.getOwnPropertyNames与Object.getOwnPropertySymbols之和,包含Symbol属性。
以上的5种方法遍历对象的属性,都遵照一样的属性遍历的次序规则
l 首先遍历全部属性名为数值的属性,按照数字排序
l 其次遍历全部属性名为字符串的属性,按照生成时间排序
l 最后遍历全部属性名为Symbol值的属性,按照生成时间排序
2、数组遍历
数组实际上也是一种对象,因此也可使用上面对象遍历的任意一个方法(但要注意尺度),另外,数组还拥有其余遍历的方法。
l 最基本的 for 循环、while 循环遍历(缺陷是多添加了一个计数变量)
l ES6 引入:for…of
1、数组内置的一些遍历方法:
1.一、forEach()方法:对数组中的每一项运行给定函数。这个方法没有返回值。
var numbers=[1,2,3,4,5]; numbers.forEach(function(item,index,array){ console.log("item:"+item+" index:"+index+" array:"+array); });
结果:
1.二、map()方法:对数组中的每一项运行给定函数,返回每次函数调用的结果组成的数组,原数组不变。
var numbers=[1,2,3,4,5]; var result=numbers.map(function(item,index,array){ return item*2; }); console.log(numbers); console.log(result);
结果:
2、一些有用的数组内置方法
2.一、every()方法:对数组中的每一项运行给定函数,若是该函数对每一项都返回true,则返回true。
2.二、filter()方法:对数组中的每一项运行给定函数,返回该函数会返回true的项组成的数组。
2.三、some()方法:对数组中的每一项运行给定函数,若是该函数对任一项返回true,则返回true。
2.四、find()方法:返回第一个经过测试的元素
2.五、findIndex()方法: 返回第一个经过测试的元素的索引
2.六、reduce()方法: 习惯性称之为累加器函数,对数组的每一个元素执行回调函数,最后返回一个值(这个值是最后一次调用回调函数时返回的值)
这个函数的回调函数有 4 个参数
accumulator: 上一次调用回调函数返回的值
currentValue: 当前在处理的值
currentIndex: 当前在处理的值的索引
array
initialValue: 可选项,其值用于第一次调用 callback 的第一个参数
例子:
[1,10,5,3,8].reduce(function(accumulator,currentValue){ return accumulator*currentValue; }); // 1200
2.7、reduceRight(): 用法和上面的函数同样,只不过遍历方向正好相反。
3、Set遍历操做
ES6 提供了新的数据结构 Set。它相似于数组,可是成员的值都是惟一的,没有重复的值。
Set 自己是一个构造函数,用来生成 Set 数据结构。
Set结构的实例有四个遍历方法,能够用于遍历成员。
l keys():返回键名的遍历器
l values():返回键值的遍历器
l entries():返回键值对的遍历器
l forEach():使用回调函数遍历每一个成员
须要特别指出的是,set的遍历顺序就是插入顺序。
一、keys方法、values方法、entries方法返回的都是遍历器对象。因为 Set 结构没有键名,只有键值(或者说键名和键值是同一个值),因此keys方法和values方法的行为彻底一致。
let set = new Set(['red', 'green', 'blue']); for (let item of set.keys()) { console.log(item); } // red // green // blue for (let item of set.values()) { console.log(item); } // red // green // blue for (let item of set.entries()) { console.log(item); } // ["red", "red"] // ["green", "green"] // ["blue", "blue"]
二、forEach()
Set结构的实例的forEach方法,用于对每一个成员执行某种操做,没有返回值。
let set = new Set([1, 2, 3]); set.forEach((value, key) => console.log(value * 2) ) // 2 // 4 // 6
4、Map遍历操做
Map数据结构。它相似于对象,也是键值对的集合,可是“键”的范围不限于字符串,各类类型的值(包括对象)均可以看成键。也就是说,Object结构提供了“字符串—值”的对应,Map结构提供了“值—值”的对应,是一种更完善的Hash结构实现。若是你须要“键值对”的数据结构,Map比Object更合适。
Map原生提供三个遍历器生成函数和一个遍历方法。
l keys():返回键名的遍历器。
l values():返回键值的遍历器。
l entries():返回全部成员的遍历器。
l forEach():遍历Map的全部成员。
须要特别注意的是,Map的遍历顺序就是插入顺序。
let map = new Map([ ['F', 'no'], ['T', 'yes'], ]); for (let key of map.keys()) { console.log(key); } // "F" // "T" for (let value of map.values()) { console.log(value); } // "no" // "yes" for (let item of map.entries()) { console.log(item[0], item[1]); } // "F" "no" // "T" "yes" // 或者 for (let [key, value] of map.entries()) { console.log(key, value); } // 等同于使用map.entries() for (let [key, value] of map) { console.log(key, value); }