数组遍历方法
- map, find, findIndex, reduce, some, every, forEach,for of
其中map返回的是一个同等长度的数组。
find返回符合条件的元素,findIndex返回符合条件元素的索引。 some和every返回布尔值。
reduce用的较少,是个累加器。
const result = [1, 2, 3].reduce(function(accumulator, current) {
return accumulator + current;
}) // 6
对象遍历方法
- for in 遍历对象的属性
for(var key in obj){
if (key == "age") {
continue;
}
}
跳出循环的方法
1 跳出本次循环
- continue: for...in for...of for循环
- return: forEach 2 跳出循环
- break: for...in for...of for循环 while do while
- try catch: forEach 等各种需要终止循环的程序
迭代器
迭代器是个对象,定义一个序列,在每次调用next()方法时,返回{value, done}。
// 自定义迭代器
function makeIterator(start, end, step) {
let nextIndex = start;
let iteratorCounter = 0;
const tangle = {
next: function() {
let result;
if (nextIndex <= end) {
iteratorCounter++;
nextIndex++;
return { value: iteratorCounter, done: false};
}
return { value: iteratorCounter, done: true};
}
}
return tangle;
}
var iterator = makeIterator(1, 4, 1);
iterator.next();
// 生成器函数
function* makeRangeIterator(start = 0, end = Infinity, step = 1) {
for (let i = start; i < end; i += step) {
yield i;
}
}
var a = makeRangeIterator(1,10,2)
a.next() // {value: 1, done: false}
function* gen() {
yield* ['a', 'b', 'c'];
}
var generation = gen();;
console.log(generation.next());
console.log(generation.next());
可迭代对象
若一个对象拥有可迭代行为,比如在for..of中会循环哪些值,则该对象是可迭代对象。
Map,Array拥有默认的可迭代行为,而Object则没有。
可以自定义可迭代对象。
var myIterable = {
*[Symbol.iterator]() {
yield 1;
yield 2;
yield 3;
}
}
for (let value of myIterable) {
console.log(value);
}
// 1
// 2
// 3
// 或者
[...myIterable]; // [1, 2, 3]
String, Array, Map等都属于内置的可迭代对象,因为它们的原型对象都拥有一个Symbol.iterator
可迭代对象可以使用for..of ,展开语法,yield*和解构赋值。