微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

请告诉我为什么这个对象迭代器只允许记录一次

如何解决请告诉我为什么这个对象迭代器只允许记录一次

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...oflength 将是 2 并且人造数组将被 Array.from() 清空,因此 {{ 1}} 循环不返回任何内容。如果您将 for...of 连续放入两次,结果将是 console.log(Array.from(result).length) 然后是 2

如果您之前没有调用 0,而是在 Array.from(result).length 之后仅粘贴一次,则 for...of 也将是 length,因为它已被 { 清空{1}}。

This is expected behavior.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。