首页 > 其他分享 >可迭代对象

可迭代对象

时间:2024-10-21 10:42:50浏览次数:1  
标签:console 迭代 iterator 对象 next infos

◼ 但是上面的代码整体来说看起来是有点奇怪的:
  我们获取一个数组的时候,需要自己创建一个index变量,再创建一个所谓的迭代器对象;
  事实上我们可以对上面的代码进行进一步的封装,让其变成一个可迭代对象;
◼ 什么又是可迭代对象呢?
  它和迭代器是不同的概念;
  当一个对象实现了iterable protocol协议时,它就是一个可迭代对象;
  这个对象的要求是必须实现@@iterator 方法,在代码中我们使用Symbol.iterator 访问该属性;
◼ 当然我们要问一个问题,我们转成这样的一个东西有什么好处呢?
  当一个对象变成一个可迭代对象的时候,就可以进行某些迭代操作;
  比如for...of 操作时,其实就会调用它的@@iterator 方法;

手写一个可迭代对象

    // 将infos变成可迭代对象
    //1.必须有一个函数叫:[Symbol.iterator]
    //2.这个函数需要返回一个迭代器(这个迭代器用于返回当前这个对象)
    //3.
    const infos = {
      friends:["kebo","james","curry"],
      [Symbol.iterator](){
        let index = 0
        const infosIterator = {
          next(){
            if(index < infos.friends.length){
              return {done:false,value:infos.friends[index++]}
            }
            else{
              return{done:true,value:undefined}
            }
          }
        }
        return infosIterator
      }
    }
    // 可迭代对象必然具备下面的特点
    // 一定可以这样拿到一个函数执行后一定拿到一个迭代器
  const iterator =  infos[Symbol.iterator]()
  // 一定可以通过迭代器.next()
  console.log(iterator.next())
  console.log(iterator.next())
  console.log(iterator.next())
  console.log(iterator.next())
  // 可迭代对象可以进行for..of
  for(const item of infos){
    console.log(item)
  }

标签:console,迭代,iterator,对象,next,infos
From: https://www.cnblogs.com/hdc-web/p/18488942

相关文章

  • 在Lua中实现Rust对象的绑定
    实现目标:能将Rust对象快速的映射到lua中使用,尽可能的简化使用。功能目标以structHcTestMacro为例:类型构建,在lua调用localval=HcTestMacro.new()可构建类型析构,在lua调用HcTestMacro.del(val)可析建,仅限lightuse**rdata字段的映射,假设有字段hc,我们需要能快速的进行字段......
  • 云函数+对象存储全包!MemFire Cloud让开发如此轻松
    在开发世界里,想要快速交付一个产品,后端服务、数据存储和API接口等往往是让开发者最头疼的环节。尤其是对于个人开发者或者小型团队而言,想要自己搭建完整的后端架构,无疑是一项费时费力的工作。现在有了MemFireCloud,这一切都变得简单了。MemFireCloud是一款为“懒人”开发者......
  • 面向对象与设计模式第一课:深入理解OOP
    第三章:面向对象与设计模式第一课:深入理解OOP面向对象编程(OOP)是一种编程范式,它将程序结构视为由对象组成,促进了代码的重用性和可维护性。在这一课中,我们将深入分析OOP的四个基本特性:封装、继承、多态和抽象,并提供相应的示例与实践。1.OOP基本特性1.1封装封装是OOP的核心......
  • vue3 修改原对象,赋值原对象的ref或者reactive如何产生响应式视图变更,vue失去响应式的
    代码测试<template><divclass='box'>{{demo[0]?.a?.b?.c}}</div></template><scriptlang='ts'setup>import{ref,reactive,computed,onMounted,nextTick,PropType,toRaw}from'vue';i......
  • 可迭代对象、迭代器、生成器
    可迭代对象如果实现了__iter__方法,就认为对象是可迭代的.使用内置的iter函数可以获取迭代器的对象.检查对象x是否为迭代器,最好的方式是调用isinstance(x,abc.Iterator)序列都是可迭代的迭代器(Iterator):迭代器是一个对象,它实现了iter()和next()两个基本方法。ite......
  • vue3 ref 或者reactive被赋值其他对象数据,用的是同一块内存,而不是深拷贝
    <template><divclass='box'>{{abcDemo?.a?.b?.c}}<button@click="changeAbc">ChangeABC</button><div>{{abdDemo?.a?.b?.c}}</div></div></template><sc......
  • 10.18Python基础迭代器生成器_函数式编程
    Python迭代器与生成器1.迭代器Iterator什么是迭代器迭代器是访问集合元素的一种方式。迭代器是一个可以记住遍历的位置的对象。迭代器可以重复使用,而不会像列表那样在迭代时被修改。迭代器函数iter和next函数说明iter(iterable)从可迭代对象中返回一个迭代器,iterabl......
  • Unity3D c# 使对象物体始终面向摄像机
    usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;publicclassLookAtMainCamera:MonoBehaviour{ //Usethisforinitialization voidStart(){ } //Updateiscalledonceperframe voidUpdate(){......
  • Java面向对象之多态,向上转型我们大家庭的由来
    各位看官早安午安晚安呀如果您觉得这篇文章对您有帮助的话欢迎您一键三连,小编尽全力做到更好欢迎您分享给更多人哦大家好我们今天来学习Java面向对象的三大特性之一的继承,我们大家庭就要来啦~一:多态的概念多态的概念:通俗来说,就是多种形态,具体点就是去完成某个行为,当......
  • 三,Java面向对象的特点其三:多态
    Java面向对象:深入理解多态性在Java编程中,多态性(Polymorphism)是指同一个事物在不同时刻下的不同状态。多态性是面向对象编程中的一个重要概念,它允许我们根据需要在运行时动态地改变对象的行为。多态概述多态允许一个类有多个形态,即在运行时可以改变对象的行为。多态性是继承和方......