Iterator和Symbol

python:numpy分享(保姆级教程) 创建数组:array和ndarray、rand()、randn()、arange()、randint()、uniform()astype()基础函数:ceil()、floor()、rint()、argmax()、argmin()、cumsum()、cumprod()numpy 是数据分析必不可少的第三方库,具有高性能的特点,多用于做数组分析。内置函数:ceil()、floor()、rint()主要用于数组计算,支持多维数组。array和ndarray。比较函数:all、any。去重函数:unique。 阅读详情

迭代模式:

提供一种方法可以顺序获得聚合对象中的各个元素,是一种最简单也是最常见的一种设计模式。它可以让用户透过特定的接口巡访集合中的每一个元素而不用了解底层的实现

迭代器简介:

依照与迭代模式的思想而实现,分为内部迭代器和外部迭代器

内部迭代器:

本身是函数,该函数内部定义好迭代规则,完全接手整个迭代过程,外部只需要一次初始化调用
Array.prototype.forEach

外部迭代器:
本身是函数,执行返回迭代对象,迭代下一个元素必须显示调用,调用复杂度增加,但灵活性增强

function outerIterator() {} 外部迭代器

迭代器目的
从迭代模式思想中可以看出,就是要标准化 迭代操作

举个例子
服务端提供数组数据给前端,前端for循环遍历,但由于业务变化,使得数据结构发生变化,返回对象或者set map,导致前端遍历代码大量重写

解决方案
ES6引入Iterator,部署在NodeList Arguments Array Set Map String等数据的Symbol.iterator属性上

console.log(Symbol('Symbol.iterator'), Symbol.iterator)

使得这些数据是iterable可迭代的,能进行for…of… Array.from()等操作

Iterator

概念:

遍历器(Iterator)就是这样一种机制。它是一种接口,为各种不同的数据结构提供统一的访问机制。任何数据结构只要部署 Iterator 接口,就可以完成遍历操作(即依次处理该数据结构的所有成员),也就是说主要是给for…of…进行消费

iterator实现规则:

next value done

根据规则:手动模拟一个简单demo

let arr = [1, 3, 5]
function OuterIterator(o) {
    let curIndex = 0
    let next = () => {
        return {
            value: o[curIndex],
            done: o.length === ++curIndex
        }
    }
    return { next }
}
let oIt = OuterIterator(arr)

Symbol

概念: 一种新的数据结构

出现原因: ES5 的对象属性名都是字符串,这容易造成属性名的冲突。比如,你使用了一个他人提供的对象,但又想为这个对象添加新的方法(mixin 模式),新方法的名字就有可能与现有方法产生冲突。如果有一种机制,保证每个属性的名字都是独一无二的就好了,这样就从根本上防止属性名的冲突。

let oS = Symbol('abc')

console.log(oS)

// 这个例子说明了Symbol如果传入的是一个对象,那么会调用Object.prototype.toString()的方法,下边是进行了重写
let oS1 = Symbol({
    value: 'chen',
    toString: function() {
        return 'i love study'
    }
})

console.log(oS1)

特点:
唯一,可以作为对象的属性,有静态属性Symbol.iterator(对应的是一个遍历器生成函数)

这个demo体现了唯一性

let oS = Symbol('abc')
let oS1 = Symbol('abc')
// 唯一
console.log(oS1 == oS) // false

根据以上的知识,那么我们可以尝试在对象上实现for…of遍历功能

var obj = {
    0: 'chen',
    1: 'chongxuan',
    length: 2,
    // 至于属性名Symbol.iterator,它是一个表达式,返回Symbol对象的iterator属性,这是一个预定义好的、类型为 Symbol 的特殊值,所以要放在方括号内
    [Symbol.iterator]: function() {
        let curIndex = 0
        let next = () => {
            return {
                value: this[curIndex],
                done: this.length == curIndex++
            }
        }
        return { next }
    }
}

console.log([...obj])
for (let prop of obj) {
    console.log(prop)
}
Xilinx UltraScale+系列FPGA实现USB3.0 DEV 设备 部分原理图+代码分享 Zynq UltraScale+ MPSoC 系列是 Xilinx 新一代 Zynq 平台。在 FPGA 里有完整的 ARM 处理(PS),包含了四核或双核 Cortex-A53 处理器 ,处理器子系统中有DDR内存控制器等大量的外设,在FPGA中完全独立于可编程逻辑单元(PL)如果暂时没有用到PL部分,PS也能单独工作,相当于可以当成一个ARM来用了(以前的不行)。 ARM也包含USB3.0控制器,这是实现USB3.0DEV的关键,根据官方手册(ug1085)描述,USB主(Host)从(Device) 阅读详情

相关推荐

DW1000芯片实战:如何用UWB技术打造10厘米精度的室内定位系统(附Arduino代码)

本文是一份基于DW1000芯片和UWB技术的实战指南,详细介绍了如何从零构建一个精度可达10厘米的室内定位系统。内容涵盖硬件选型与连接、软件环境配置、核心的双向测距算法实现,并深入探讨了信号干扰抑制、功耗优化等实战挑战,为物联网开发者提供了完整的Arduino代码和部署思路。

root9的博客 497

Symbol.Iterator简单理解

symbol 是什么? Itertor是什么? symbol的内置符号symbol.Iterator,有什么用? 为什么会出现for..of? for..of怎么用? 首先symbol是es6新增的类型,它是一个基本类型,symbol英文翻译是符号的意思。 在叙述symbol之前,推出一个概念,“以操作目标为程序本身的行为特性的编程,我们称为元编程。” 我们已知symbol是es6新增类型,按照逻辑推演:作为新增的类型,symbol一定是为了弥补了之前的不足,所以才出现的

m0_46525076的博客 6871

提示deepseek生成完整的json用于对接外部API

通过精准的提示词设计(字段过滤、格式约束)、动态验证机制(自检与修正)和官方模板参考,可有效确保DeepSeek生成的JSON纯净无冗余。

神棍之路 2309

(基础)JavaScript迭代器[Symbol.iterator]

迭代器就是为实现对不同集合进行统一遍历操作的一种机制,只要给需要遍历的数据结构部署Iterator接口,通过调用该接口,或者使用消耗该接口的API实现遍历操作。

次顶级的博客 2218

我用WorkBuddy“克隆“了一个我,从此每句话像我自己说的

各位,做这件事花了多长时间?准备样本可能要半小时,提炼风格十分钟,保存固化再花十分钟。加起来不到一个小时。但这一个小时之后呢?你就拥有了一个"永远在线的文字替身"。以后写口播稿,打开WorkBuddy跟它说;写课程逐字稿,跟它说;写公众号文章,也跟它说。写出来的东西,你的学员一看——“嘿,这不就是翟猛老师说的嘛。说到这儿,可能有人会问:老师,我的风格有那么重要吗?AI写的不都挺好的吗?各位你想想看,你为什么愿意听某个老师的课?不只是因为他讲的内容好,更是因为你喜欢他讲话的方式。

weixin_39284145的博客 823

用Python的fengwo模块复刻通达信筹码峰(COST/WINNER),选股效率提升10倍

本文介绍了如何使用Python的fengwo模块高效复刻通达信的筹码峰(COST/WINNER)计算,显著提升选股效率。通过C++内核与多线程优化,fengwo模块将传统Python实现的数小时计算压缩至分钟级,解决了量化交易中的性能瓶颈问题。文章详细解析了筹码峰计算原理、fengwo模块的技术架构及实战应用,助力量化开发者构建高效选股系统。

weixin_29062823的博客 440

Iterator遍历器

概念 遍历器(Iterator)就是这样一种机制。它是一种接口,为各种不同的数据结构提供统一的访问机制。任何数据结构只要部署 Iterator 接口,就可以完成遍历操作(即依次处理该数据结构的所有成员) 作用 Iterator 的作用有三个:一是为各种数据结构,提供一个统一的、简便的访问接口;二是使得数据结构的成员能够按某种次序排列;三是 ES6 创造了一种新的遍历命令for...of循环,...

oiaa的博客 331

OpenClaw + Antigravity + 飞书完整部署教程

在 Linux 服务器上部署 OpenClaw,使用 Antigravity 本地代理 AI 模型,并接入飞书实现 24 小时在线 AI 助手。

Maynor的博客 1788

Symbol.iterator迭代器

可以应用for..of的对象被称为 可迭代的。技术上来说,可迭代对象必须实现方法。的结果被称为 迭代器(iterator)。由它处理进一步的迭代过程。一个迭代器必须有next()方法,它返回一个对象,这里done:true表明迭代结束,否则value就是下一个值。方法会被for..of自动调用,但我们也可以直接调用它。内建的可迭代对象例如字符串和数组,都实现了。

咸鱼滚滚 1427

Tessent ATPG Flow 流程 (代码和注释)

**摘要:Tessent ATPG流程分为五个阶段:1) 环境初始化(加载设计文件、库和扫描链配置);2) DRC规则检查(验证设计可测试性并修复违例);3) ATPG向量生成(设置故障模型并运行引擎优化覆盖率);4) 向量验证与后处理(仿真验证并生成ATE格式文件);5) 进阶操作(多电压域和存储器测试)。流程输出包括测试向量、覆盖率报告和验证日志,支持stuck-at和transition故障模型,使用Tcl脚本控制。关键步骤包含扫描链配置、EDT压缩和覆盖率优化。

QQ_778132974的博客 932

YOLOv8/v9轻量化优化:剪枝30%+蒸馏提精,模型体积缩至4MB还能跑Jetson

剪枝:用敏感度分析找到“可牺牲的30%”,不碰核心特征;蒸馏:借大模型的“经验”补回精度,甚至反超原始小模型;量化:针对边缘设备特性优化量化策略,把体积和延迟压到最低。如果你的项目卡在边缘部署(速度慢/体积大),按“剪枝→蒸馏→量化”三步走,90%能在Jetson上跑通30FPS+的实时检测。需要轻量化模型文件(v8s/v9s剪枝蒸馏后权重)、剪枝工具和Jetson部署脚本的,评论区扣“轻量化”,直接发你可运行版本~

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 669

ES6 语法2 Symol-迭代器-生成器

Symol-迭代器-生成器

weixin_41909678的博客 953

二十八.国民技术MCU开发之UID获取与应用

在国民NT MCU中均有一个96位和128位的唯一设备标识符,其中UCID128 位, UID 为 96 位。手册中描述的作用是:通常用来做为序列号或作为密码,在编写闪存时,将此唯一标识与软件加解密算法相结合,进一步提高代码在闪存存储器内的安全性,也可用于激活带安全功能的自举程序(SecureBootloader)。UCID 和 UID,遵守国民技术芯片序列号定义,它包含芯片生产及版本相关信息。

AIoT深度探索者 | 嵌入式系统架构师 深耕物联网(IoT)与人工智能(AI)融合技术,聚焦​​边缘计算、图像开发、低功耗通信协议​​,致力于智能硬件,关注我获取最新技术文章信息与海量资源~ 1679

【前端】ES6:Symbol与Iterator

它属于JavaScript语言的原生数据类型之一,其他数据类型是:undefined、null、布尔值(Boolean)、字符串(String)、数值(Number)、对象(Object)。ES6规定,默认的Iterator接口部署在数据结构的Symbol.iterator属性,或者说,一个数据结构只要具有Symbol.iterator属性,就可以认为是“可遍历的”(iterable)。Symbol.iterator属性本身是一个函数,就是当前数据结构默认的遍历器生成函数。

weixin_45980065的博客 693

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

ES6 Symbol.iterator迭代器

定义:Symbol.iterator 为每一个对象定义了默认的迭代器。该迭代器可以被 for…of 循环使用。 描述: 当需要对一个对象进行迭代时(比如开始用于一个for…of循环中),它的@@iterator方法都会在不传参情况下被调用,返回的迭代器用于获取要迭代的值。 一些内置类型拥有默认的迭代器行为,其他类型(如 Object)则没有。下表中的内置类型拥有默认的@@iterator方法: ...

weixin_43931898的博客 1973

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

今日笔记:关于Symbol(Symbol.iterator)的使用笔记

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Do.

Hereisrubbish的博客 1235

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

TypeScript: Symbol.iterator属性

Symbol.iterator是ES6引入的特殊Symbol,用于定义对象的默认迭代行为。在TypeScript中,它使对象可被for...of、展开运算符等语法使用。核心包括:1)实现迭代协议,要求对象包含返回迭代器的[Symbol.iterator]方法;2)迭代器需有next()方法返回{value,done}。可通过原生对象(如数组)、自定义类(如链表)或生成器函数实现。其优势包括类型安全、惰性求值、支持无限序列等,特别适合处理大型数据集、树结构等场景。

2401_87008233的博客 508

08-Symbol.iterator迭代器

目录1. 迭代器2. 采用Symbol.iterator实现某个类型的迭代的模板3. 采用Symbol.iterator实现Object类型的迭代 1. 迭代器   Symbol.iterator 为每一个对象定义了默认的迭代器。该迭代器可以被 for…of 循环使用。   当需要对一个对象进行迭代时(比如开始用于一个for…of循环中),它的@@iterator方法都会在不传参情况下被调用,返回的迭代器用于获取要迭代的值。   如Array类型: let array = ["a", "b", "c", "

Notes 399

Symbol.iterator 迭代器的作用

// 统计每个班级所有学生的姓 const allLastName = { class1: ['赵', '钱', '孙', '李'], class2: ['周', '吴', '郑', '王'], [Symbol.iterator]: function() { console.log(2222222, this) // 收集所有姓 const allClass = [...this.class1, ...this.class2] let

c_liufeng的博客 1378

ES6新特性(四) Symbol和迭代器Iterator的使用

一、Symbol 应用场景:因为每一个 Symbol 的值都是不相等的,所以 Symbol 作为对象的属性名,可以保证属性不重名。 1.1. 什么是Symbol ? 1.1.1. Symbol是ES6中新增的原始数据类型,Symbol提供一种独一无二的值 比如:在js中声明一个变量a = 5;再声明一个变量b = 5; 虽然这两个变量名不同,但是值是相等的;使用Symbol声明的值不重复、不相等。...

F_mengze的博客 2148

Symbol.iterator 遍历器接口

Iterator(遍历器)的概念JavaScript 原有的表示“集合”的数据结构,主要是数组(Array)和对象(Object),ES6 又添加了Map和Set。[ [1, 2], {a: 1, b: 2}, new Set([1, 2]), new Map([['a',1],['b',2]]) ]这样就有了四种数据集合,用户还可以组合使用它们,定义自己的数据结构,比如数组的成员...

文摘资讯 961

symbol,iterator,generator

1.symbol是在ES6中引入的一种基本数据类型,因为symbol是不重复、唯一的数据特性,symbol设计是被用来表示对象内部的私有属性的。 symbol.for与symbol.keyfor: let a = Symbol.for(‘123’) let b= Symbol.for(‘123’) a == b // true (在全局用这...

dglf54292的博客 201

es6 Symbol.iterator接口机制

ES6 Symbol-iterator接口机制 1、使用for of 去遍历时,会首先找遍历对象是否有Symbol.iterator属性,若有可直接使用,若无需要手动设置,对象就需要手动设置 2、使用三点运算符,默认调用iterator接口 代码示例: <html ng-app='app' ng-controller='main' > <head> <...

weixin_43294560的博客 283

Symbol.iterator 详解

Symbol.iterator是JavaScript中定义对象默认迭代器的内置符号,用于实现可迭代协议。关键点包括:1)通过实现[Symbol.iterator]方法使对象可被for...of等消费;2)迭代器需返回包含next()方法的对象,next()返回{value,done}结构;3)内置对象如Array/String/Map/Set已支持;4)适用于自定义数据结构、惰性计算等场景。该特性是ES6标准,需注意旧环境兼容性。文中提供了自定义迭代器和生成器实现的代码示例,展示如何创建可迭代对象。

记录来时的路 580

arr[Symbol.iterator]

arr[Symbol.iterator]每一个数组、伪数组、new Set()、 new Map() 中都有一个Symbol.interator 接口, 每个Symbol.interator中都抛出一个next() 函数, next 中都返回两个属性,一个value, 一个done。 第一种 var arr = ['a', 'b', 'c', 'd', 'e']; var eArr = arr[Symbol.iterator](); //此返回的是一个方法可以被for of循环使用 // 浏览器必须支.

0.0 的博客 446

Symbol.iterator的理解

es6中有三类结构生来就具有Iterator接口:数组、类数组对象、Map和Set结构。 var arr = [1,2,3,4]; let iterator = arr[Symbol.iterator](); console.log(iterator.next()); //{ value: 1, done: false } console.log(iterator.next()); //...

潜行IT的博客 1万+
上一篇: async+await
下一篇: Vue.extend源码分析
ccxCode
博客等级 码龄8年 1粉丝 31原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值