ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

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

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-12-18 10:52 | 显示全部楼层 |阅读模式
如图,在VBA下完全没有问题,在JSA下第一重循环只取了第1个数就跳出循环了,WHY?
360截图20241218104817305.jpg
360截图20241218104849180.jpg

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-12-18 11:43 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
去问了看见星光大佬,是这么说的:可以理解成wps的单元格对象有一个内部的指针或者说游标,当第1个of遍历时,游标被移动了,如果没有重置这个游标,第2个of就会自动从上次停止的地方继续,而不是重新开始

TA的精华主题

TA的得分主题

发表于 2024-12-18 11:53 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2024-12-18 12:22 | 显示全部楼层
for...of 有一段语法描述:
当 for...of 循环迭代一个可迭代对象时,它首先调用可迭代对象的 Symbol.iterator]() 方法,该方法返回一个迭代器,然后重复调用生成器的 next() 方法,以生成要分配给 variable 的值的序列。

你的内循环提前完成了rng循环,外循环的相同的rng回不去了。欲要达成目的,可为如下代码:
  1. function tt5(){
  2.     console.clear()
  3.     let rng = Range('a2:b3');
  4.     let rng2 = Range('a2:b3');//rng2跟rng不同
  5.     for (let a of rng){
  6.         Debug.Print(a.Address(0,0))
  7.         for (let b of rng2){
  8.             Debug.Print(a.Address(0,0)+','+b.Address(0,0))
  9.         }
  10.     }
  11.     console.log(`判断rng和rng2是否相同:${rng == rng2}`)
  12. }
复制代码


TA的精华主题

TA的得分主题

发表于 2024-12-18 12:40 | 显示全部楼层
对于数组的迭代,不会出现这样的情况:
function tt7(){
    const arr = ['a2','b2','a3','b3'];
    console.clear()
    Array.from(arr, a => {
        console.log(a);
        Array.from(arr, b => {
            console.log(`${a},${b}`)
        })
    })
}
注,楼主顶楼的循环代码,也可以可以用Array.from来写

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-12-18 13:17 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2024-12-18 14:05 | 显示全部楼层
grf1973 发表于 2024-12-18 13:17
懂了,谢谢各位大佬。

你自己才是大佬,给众多坛友提供了很多帮助,这里只是一时“卡壳”而已

TA的精华主题

TA的得分主题

发表于 2024-12-18 15:47 | 显示全部楼层
默认就是单元格遍历 何来第二层遍历??? 除非指定for (var ar of range("a2:b3").Rows){}才会有第二层遍历

TA的精华主题

TA的得分主题

发表于 2024-12-18 15:48 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2024-12-18 22:29 来自手机 | 显示全部楼层
本帖最后由 lss001 于 2024-12-19 12:34 编辑

function example(){
    console.clear();
    const  rng = Range("A2:B3");
    let addre = rng.Address(0, 0);
    for (r of rng){
        console.log(r.Address(0, 0))
        for (c of Range(addre)){
            Debug.Print(r.Address(0,0)+";"+c.Address(0,0));
        }
    }
}
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-12-25 02:51 , Processed in 0.045576 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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