ES6 Iterator遍历器

Posted 张仪ranck

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ES6 Iterator遍历器相关的知识,希望对你有一定的参考价值。

数据集合【Array,Object,Map,Set】的统一遍历数据结构机制

Iterator 遍历过程

  1. 创建对象指针,指向起始位置
  2. 第一次调用next,访问第一个对象
  3. 不断调用next方法,直至终止
  4. { 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遍历器的主要内容,如果未能解决你的问题,请参考以下文章

ES6之遍历器(Iterator)

ES6的 Iterator 遍历器到底是什么?

js es6语法 Iterator遍历器 promise async函数

ES6 中的 iterator

ES6中Iterator 接口与 Generator 函数以及遍历器对象的 return(),throw()使用

ES6中Iterator 接口与 Generator 函数以及遍历器对象的 return(),throw()使用