7种数组遍历的方法
- forEach
- 普通的数组遍历方法
- 对ES3 for循环语句的优化
- map
- 映射
- 每一次遍历,返回一个数组元素
- 返回一个新的数组
- filter
- 过滤
- 每一次遍历返回bool来决定当前元素是否纳入新的数组中
- reduce
- 归纳
- 每一次遍历将当前元素收归到容器中
- reduceRight
- reduce反向操作
- every
- 判定是否所有元素都符合一个条件
- some
- 判定是否有某一个或多个元素符合一个条件
以上都底层都是基于 for循环 / while 语法来实现
遍历
一次性对数组中每一个元素进行查询和处理
迭代的过程
如果希望对于遍历的过程是可控的
手动的控制遍历流程
- 遍历过程可停止
- 也可以继续
例子
产品迭代
人为控制的产品升级与扩展,manual control
生成器
迭代器
生成器函数执行后返回的一个带有next方法的对象
生成器对迭代的控制是由yield
关键字来执行的
function * generator(){
yield '姓名: xxx';
yield '年龄: 34';
yield '爱好: 旅游';
return '我爱Javascript';
}
const iterator = generator();
每次yield会产品一个迭代的对象,该对象包含了value和done两个属性
const arr = ['姓名: xxx', '年龄: 34', '爱好: 旅游'];
function * gen(){
for(var i = 0; i < arr.length; i++){
yield arr[i];
}
return '我爱Javascript';
}
yield * 产生可迭代对象
可以使用星号增加yield的行为,让它能够行代一个可迭代对象,从而一次产出一个值。
function* generatorFn() {
/*
等价
for (const x of [1, 2, 3]) {
yield x;
}
*/
yield* [1, 2, 3];
}
let generatorObject = generatorFn();
for (const x of generatorFn()) {
console.log(x);
}
// 1
// 2
// 3
手写生成器:生成迭代器
const arr = ['姓名: xxx', '年龄: 34', '爱好: 旅游'];
function gen(arr){
var nextIndex = 0;
return {
next: function(){
return nextIndex < arr.length ?
{ value: arr[nextIndex++], done: false } :
{ value: arr[nextIndex++], done: true };
}
}
}
}
const iterator = gen(arr);