如何解决请告诉我为什么这个对象迭代器只允许记录一次
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()
清空,因此 {{ 1}} 循环不返回任何内容。如果您将 for...of
连续放入两次,结果将是 console.log(Array.from(result).length)
然后是 2
。
如果您之前没有调用 0
,而是在 Array.from(result).length
之后仅粘贴一次,则 for...of
也将是 length
,因为它已被 { 清空{1}}。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。