zoukankan      html  css  js  c++  java
  • 数组迭代,对象迭代

    遍历器(Iterator)是一种机制(接口):为各种不同的数据结构提供统一的访问机制,任何数据结构只要部署Iterator接口,就可以完成遍历操作「for of循环」,依次处理该数据结构的所有成员
    * + 拥有next方法用于依次遍历数据结构的成员
    * + 每一次遍历返回的结果是一个对象 {done:false,value:xxx}
    * + done:记录是否遍历完成
    * + value:当前遍历的结果
    *
    * 拥有Symbol.iterator属性的数据结构(值),被称为可被遍历的,可以基于for of循环处理
    * + 数组
    * + 部分类数组:arguments/NodeList/HTMLCollection...
    * + String
    * + Set
    * + Map
    * + generator object
    * + ...

    数组迭代

    class Iterator{
    constructor(assemble) {
    let self = this;
    self.assemble = assemble;
    self.index = 0
     
    }
    next() {
    let self = this,
    assemble = self.assemble;
    if (self.index > assemble.length - 1) {
    return {
    done: true,
    value:undefined
    }
     
    }
    return {
    done: false,
    value:this.assemble[self.index++]
    }
     
    }

    }
    let itor = new Iterator([10, 30, 20, 40])
    console.log(itor.next());
    console.log(itor.next());
    console.log(itor.next())
    console.log(itor.next())
    console.log(itor.next())
     
    对象迭代
    let obj = {
    name: 'zhufeng',
    age: 12,
    teacher:'team'
    }
    //obj[Symbol.iterator]
    Object.prototype[Symbol.iterator] = function () {
    let assemble = this,
    keys = Object.keys(assemble).concat(Object.getOwnPropertySymbols(assemble)),
    index = 0;
    return {
    next() {
    if (index > keys.length - 1) {
    return {
    done: true,
    value: undefined
    };
    }
    return {
    done: false,
    value:assemble[keys[index++]]
    }
    }
    }
    }
    for (let value of obj) {
    console.log(value)
    浏览器展示如下:
    }
    对象迭代:
    let obj = {
    name: 'zhufeng',
    age: 12,
    teacher:'team'
    }
    //obj[Symbol.iterator] 可以给对象添加属性[Symbol.iterator]也可以给对象原型添加属性[Symbol.iterator]
    Object.prototype[Symbol.iterator] = function () {
    let assemble = this,
    keys = Object.keys(assemble).concat(Object.getOwnPropertySymbols(assemble)),
    index = 0;
    return {
    next() {
    if (index > keys.length - 1) {
    return {
    done: true,
    value: undefined
    };
    }
    return {
    done: false,
    value:assemble[keys[index++]]
    }
    }
    }
    }
    for (let value of obj) {
    console.log(value)
    }
    浏览器输出:
  • 相关阅读:
    优化windows7硬盘操作文件的速度
    Google 开源API汇总
    兼容IE和FF:复制本页地址 收藏本页地址 复制当前页地址和标题
    暂时中断一段时间
    Silverlight C# 游戏开发:绚丽的粒子特效颜色粒子(一)
    任天堂模拟器Silverlight版开发,POPNes Emulator!
    Silverlight C# 游戏开发:资源的处理,图像算法(一)
    Silverlight C# 游戏开发:绚丽的粒子特效粒子效果(二)
    吐血的有道谜题
    Silverlight C# 游戏开发:Flyer09扇动翅膀的蝴蝶
  • 原文地址:https://www.cnblogs.com/zhx119/p/14401884.html
Copyright © 2011-2022 走看看