ES6 Iterator遍历器
Posted 张仪ranck
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ES6 Iterator遍历器相关的知识,希望对你有一定的参考价值。
数据集合【Array,Object,Map,Set】的统一遍历数据结构机制
Iterator 遍历过程
- 创建对象指针,指向起始位置
- 第一次调用next,访问第一个对象
- 不断调用next方法,直至终止
- { value: undefined, done: true }
var it = makeIterator([\'a\', \'b\']);
function makeIterator(array) {
var index = 0;
return {
next: function() {
return index < array.length ? {
value: array[index++],
done: false
}: {
value: void 0,
done: true
}
}
}
}
object本身不能被遍历,
ES6规定实现Symbol.iterator 可以支持遍历
var obj = {
name: "ranck",
massgage: "hahah",
level: "t3"
}
for(let value of obj) {
console.log(value) // Uncaught TypeError: obj is not iterable
}
obj[Symbol.iterator] = function () { // 这样不报错,但是不生效
return {
next: function () {
return {
value: 1,
done: false
};
}
}
}
obj[Symbol.iterator] = function () {
const attrs = Object.getOwnPropertyNames(this)
let index = 0
return {
next: () => {
return index < attrs.length ? {
value: this[attrs[index++]],
done: false
}: {
value: void 0,
done: true
}
}
}
}
获取对象的属性
- Object.getOwnPropertyNames
- Object.getOwnPropertySymbols
- Object.keys
- Object.values
- Object.entries
- Reflect.ownKeys = Object.getOwnPropertyNames + Object.getOwnPropertySymbols
以上是关于ES6 Iterator遍历器的主要内容,如果未能解决你的问题,请参考以下文章
js es6语法 Iterator遍历器 promise async函数