0
点赞
收藏
分享

微信扫一扫

for...in for...of遍历对象的四种方式

yeamy 2022-03-11 阅读 63

首先最简单的ES 5的for in遍历对象

let a={
    a:100,
    b:200
}
for(let key in a)
    console.log(key,a[key])

for+Object.keys()方法遍历对象

let a={
    a:100,
    b:200
}
for(let key of Object(a))
    console.log(key,a[key])

for of+Object.entries()方法返回一个给定对象自身可枚举属性的键值对数组

let a={
    a:100,
    b:200
}
for(let [key,value] of Object.entries(a))
    console.log(key,value)

        将对象转化为迭代器对象+for of遍历(普通对象不是可迭代对象,所以无法通过for of遍历,否则会报错:Uncaught TypeError: a is not iterable),可以用isIterator()来判断。

        要让对象能够被for in遍历,就需要实现Symbol.iterator接口,用ES6 的Generator生成器来给Object添加一个迭代器。

Object.prototype[Symbol.iterator]=function*(){
    const arr=Object.entries(this)
    const len=arr.length
    for(let i=0;i<len;++i){
       yield {[arr[i][0]]:arr[i][1]}
    }
}

现在就可以直接用for of遍历普通对象啦,结果如下:

 当然,污染全局对象是不好的,可以自行封装一个转化指定对象为可迭代对象的方法。

举报

相关推荐

0 条评论