zoukankan      html  css  js  c++  java
  • Iterator(遍历器)

    Iterator(遍历器)的概念

      JavaScript原有的表示"集合"的数据结构主要是数组(Array)和对象(Object),ES6又添加了Map和Set。这样就有了4种数据集合,用户还可以组合使用它们,定义自己的数据结构,比如数组的成员是Map,Map的成员是对象。这样就需要一种统一的接口机制来处理所有不同的数据结构。

    Iterator(遍历器)的作用

      Iterator的作用有3个:一是为各种数据结构提供一个统一的,简便的访问接口;二是使得数据结构的成员能够按某种次序排练;三是ES6创造了一种新的遍历命令---for...of循环,Iterator接口主要提供for...of消费。

    Iterator的遍历过程如下。

    1.创建一个指针对象,指向当前数据结构的起始位置。也就是说,遍历器对象本质上就是一个指针对象。

    2.第一次调用指针对象的next方法,可以将指针指向数据结构的第一个成员。

    3.第二次调用指针对象的next方法,指针就指向数据结构的第二个成员。

    4.不断调用指针对象的next方法,直到它指向数据结构的结束位置。

    每次调用next方法都会返回数据结构的当前成员的信息。具体来说,就是返回包含value和done两个属性的对象。其中,value属性是当前成员的值,done属性是一个布尔值,表示遍历是否结束。

    下面是一个模拟next方法返回值的例子

    function makeIterator(array){
      var nextIndex = 0
      return {
        next: function(){
           return nextIndex < array.length ?
            {value:array[nextIndex++], done:false}:
            {value:undefined, done:true}
      }
    }  
    
    var it = makeIterator(['a','b'])
    
    it.next()   //{value:"a", done:false}  
    it.next()   //{value:"b", done:false}  
    it.next()   //{value:undefined, done:true}  

    指针对象的next方法用于移动指针。开始时,指针指向数组的开始位置。(注意:开始索引为-1)。然后,每次调用next方法,指针就会指向数组的下一个成员。第一次调用,指向a;第二场调用,指向b。

    对于遍历器对象来说,done:false 和 value:undefined属性都是可以省略的。

    由于Iterator只是把接口规格加到了数据结构上,所以,遍历器与所遍历的数据结构实际上是分开的,完全可以写出没有对应数据结构的遍历器对象,或者说用遍历器对象模拟出数据结构。下面是一个无限运行的遍历器对象的例子。

    var it = idMaker()
    
    it.next().value  // '0'
    it.next().value  // '1'
    it.next().value  //'2'
    // ...
    
    
    function idMaker(){
      var index = 0
    
       return{
         next: function(){
            return {value: index++, done: false}
         }    
      }    
    
    }

    上面的例子中,遍历器生成函数idMaker返回一个遍历器对象(即指针对象)。但是并没有对应的数据结构,或者说,遍历器对象自己描述了一个数据结构。

  • 相关阅读:
    正则表达式 (记录中...)
    css 坑记
    WebApi 中使用 Token
    WebApi 中使用 Session
    微信小程序 入门
    .net EF监控 MiniProfiler
    css布局
    移动端1像素边框问题
    移动端页面自适应解决方案:rem 布局篇
    js重点知识总结
  • 原文地址:https://www.cnblogs.com/lovekiku123/p/12370126.html
Copyright © 2011-2022 走看看