javascript - 请告诉我为什么这个对象迭代器只允许记录一次
问题描述
let str = '<span class="my"> <var suv="inn">';
let regexp = /<(([a-z]+)\s*([^>]*))>/g;
let result = str.matchAll(regexp);
console.log(result[0]);
console.log(result);
//It is an iterable object'
console.log("Array from method");
var a = Array.from(result);
console.log(a[0]);
console.log(a[1]);
console.log("for loop method");
for (let value of result){
console.log(value);
}
我们可以看到,当我们首先放置 ArrayFrom 方法时,它记录了值,但 ForLoop 方法没有。
let str = '<span class="my"> <var suv="inn">';
let regexp = /<(([a-z]+)\s*([^>]*))>/g;
let result = str.matchAll(regexp);
console.log(result[0]);
console.log(result);
//It is an iterable object'
console.log("for loop method");
for (let value of result){
console.log(value);
}
console.log("Array from method");
var a = Array.from(result);
console.log(a[0]);
console.log(a[1]);
同样,当我们首先放置 ForLoop 方法时,它会记录值但 ArraFrom 方法没有。
为什么不是两种方法都在一种方法记录之后记录。
(我真的不知道如何提出我的问题,我真的希望我清楚!)
解决方案
似乎正在发生的事情是,在迭代器的每一次进展之后,当前项目都会从人造数组中删除,而迭代器则为空。
如果你坚持console.log(Array.from(result).length)
在for...of
循环之前,length
将是2
并且人造数组将被清空,Array.from()
因此for...of
循环不返回任何内容。如果你console.log(Array.from(result).length)
连续输入两次,结果将是2
then 0
。
如果你不调用before ,但是你在theArray.from(result).length
之后只粘贴一次,也是因为它被 清空了。for...of
length
0
for...of
推荐阅读
- javascript - 传单:如何仅在一层上显示标记或图例?
- python - 用作迭代器的变量不会在 Python 的嵌套循环中更改其值
- mysql - 需要根据 ORDER BY 子句更新列:错误 1093 无法在 FROM 子句中指定要更新的目标表
- list - SwiftUI 异步数据获取
- mysql - mysql中的组连接
- php - Laravel:创建方法给出 404 !!不知道为什么
- ruby-on-rails - 测试期间的 Rspec 测试属性分配
- python - MOD_WSGI 找不到 Oracle 即时客户端库
- kotlin - 如何创建一个 MutableList
> 来自可变列表 > 在 Kotlin 中大小相同 - python - 如果它是 int Python,则从 Excel 中检索 int 值