shfshanyue / Daily-Question

互联网大厂内推及大厂面经整理,并且每天一道面试题推送。每天五分钟,半年大厂中
https://q.shanyue.tech
4.92k stars 508 forks source link

【Q685】如何遍历一个对象 #704

Open shfshanyue opened 3 years ago

shfshanyue commented 3 years ago
  1. Reflect.ownKeys({ a: 3, b: 4})
  2. Object.keys({ a: 3, b: 4 })
DanielLeefu commented 3 years ago
  1. for in
  2. object.keys()
  3. object.entries()
Yand-hi commented 2 years ago

普通对象可以通过添加一个Symbol.iterator属性,实现使用 for of 遍历

const obj = {a: 1, b: 2, c: 3}

obj[Symbol.iterator] = function () {
  let i = 0
  const keys = Object.keys(this)
  return {
    next: () => {
      return i <= keys.length - 1 ? 
        {value: this[keys[i++]], done: false} : 
        {value: undefined, done: true}
    }
  }
}

for (let item of obj) {
  console.log(item)
}

//   1
//   2
//   3

for of 遍历每次都会调用 Symbol.iterator 中的 next 方法