JavaScript Object.entries 的实现 及 iterator(迭代器)原理
Object.entries 的实现
const demo = {a: 1, b: 2}
const entries = (o = {}) => {
const keys = Object.keys(o)
return keys.map(v => [v, o[v]])
}
const result = entries(demo)
// 可被for...of循环 因为数组本身具有[Symbol.iterator]方法
for (const [k, v] of result) {
console.log(k, v)
}
iterator 的实现
// 对象不可直接被for...of迭代 本身不具有[Symbol.iterator]方法
// 手动为对象添加[Symbol.iterator] 使得 对象也可以被for...of调用
const person = {
value: [['id', 1], ['name', 'cxk']],
[Symbol.iterator]() {
const self = this
let index = 0
return {
next() {
const temp = {
value: self.value[index],
done: index >= self.value.length
}
index += 1
return temp
}
}
}
}
for (const [k, v] of person) {
console.log(k, v)
}
使用 while 循环 模拟 for...of
const temp = {a: 1, b: 2}
const iterator = Object.entries(temp)[Symbol.iterator]()
let cur = iterator.next()
while (!cur.done) {
console.log(cur.value)
cur = iterator.next()
}
为之则易,不为则难。
本文作者:demo_you
本文链接:https://www.cnblogs.com/coderDemo/p/16317020.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】博客园的心动:当一群程序员决定开源共建一个真诚相亲平台
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】Flutter适配HarmonyOS 5知识地图,实战解析+高频避坑指南
【推荐】凌霞软件回馈社区,携手博客园推出1Panel与Halo联合终身会员
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步