ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: grf1973

大家来看看,JSA对于Range遍历双循环为何中断

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-12-20 12:11 | 显示全部楼层
今铭昔 发表于 2024-12-20 11:13
A佬这个,可以用函数生成器的写法。JS实现一个可迭代对象,是非常简单的

感谢 今铭昔 大佬!
受益匪浅!
之前反复学习不得要领的知识点,现在又初步学到了
今天无法送花了,明天再送

TA的精华主题

TA的得分主题

发表于 2024-12-20 13:17 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
今铭昔 发表于 2024-12-20 11:13
A佬这个,可以用函数生成器的写法。JS实现一个可迭代对象,是非常简单的

Snipaste_2024-12-20_13-17-13.png

TA的精华主题

TA的得分主题

发表于 2024-12-20 13:20 | 显示全部楼层

function tt4(){
        let rng = Range('a1:a3');
        rng[Symbol.iterator] = function* () {//自定义迭代器不起作用?
            const values = [...this];
            for (let i = values.length - 1; i >= 0;  i--) {//逆序取值
                yield values.Address(0,0);
            }
        };
        console.clear()
        for (let a of rng) {
            console.log(a);//改成a.Address(0,0)有输出,不是预期结果
        }
}

TA的精华主题

TA的得分主题

发表于 2024-12-20 13:34 | 显示全部楼层
今铭昔 发表于 2024-12-20 11:13
A佬这个,可以用函数生成器的写法。JS实现一个可迭代对象,是非常简单的

模仿练习一下,遍历对象value改遍历对象key
Snipaste_2024-12-20_13-34-14.png

TA的精华主题

TA的得分主题

发表于 2024-12-21 09:47 | 显示全部楼层
image.png

我前面模仿的迭代器里,也模仿了一个生成器。
这个生成器和我模仿返回的闭包函数结果差不多,
官方实现生成器应该比我模仿的高级

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-12-21 13:01 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
一江春水1688 发表于 2024-12-20 13:20
function tt4(){
        let rng = Range('a1:a3');
        rng[Symbol.iterator] = function* () {//自定义迭代器 ...

image.jpg

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-12-21 19:35 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2024-12-22 11:14 | 显示全部楼层
Again123456 发表于 2024-12-21 09:47
我前面模仿的迭代器里,也模仿了一个生成器。
这个生成器和我模仿返回的闭包函数结果差不多,
官方实 ...

感谢A佬!
消化这些知识点,有点吃力,反复看MDN文档,也不知道是否存在概念错误,下面是我模仿的代码,注释是我自己的理解,也许概念理解不准确存在错误? Snipaste_2024-12-22_11-10-56.png

TA的精华主题

TA的得分主题

发表于 2024-12-22 11:19 | 显示全部楼层
一江春水1688 发表于 2024-12-22 11:14
感谢A佬!
消化这些知识点,有点吃力,反复看MDN文档,也不知道是否存在概念错误,下面是我模仿的代码, ...
  1. function test(){
  2.     //自定义迭代器
  3.     let fun = function*(){//由生成器函数编写的生成器,是一个特殊的迭代器
  4.         yield 'a'
  5.         yield 'b'
  6.     }
  7.    
  8.     let iterA = fun();//迭代器返回的对象,是可迭代对象,只能迭代一次
  9.     let iterB = fun();//只能迭代一次
  10.     for (const a of iterA){
  11.         console.log(a)
  12.         for (const b of iterB){
  13.             console.log(`\t${b}`)
  14.         }
  15.     }
  16.     console.log('-------下面是迭代多次演示--------')
  17.     iterA[Symbol.iterator] = fun;//对象添加了Symbol.iterator属性,可以迭代多次
  18.     for (const a of iterA){
  19.         console.log(a)
  20.         for (const b of iterA){
  21.             console.log(`\t${b}`)
  22.         }
  23.     }
  24. }
  25. test()
复制代码

TA的精华主题

TA的得分主题

发表于 2024-12-22 11:42 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

感谢 今铭昔 大佬耐心指导,收益满满!
判断对象是否存在迭代器接口,两种方式添加迭代器,__proto__原型、继承,看了就懂令人眼前一亮的解构用法,信息量超大啊,都是我的知识盲点,需要慢慢消化。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-12-25 02:49 , Processed in 0.048333 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表