数据集合【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
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。