首页 > 解决方案 > 请告诉我为什么这个对象迭代器只允许记录一次

问题描述

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 方法没有。

为什么不是两种方法都在一种方法记录之后记录。
(我真的不知道如何提出我的问题,我真的希望我清楚!)

标签: javascriptobjectiteratorconsole.log

解决方案


似乎正在发生的事情是,在迭代器的每一次进展之后,当前项目都会从人造数组中删除,而迭代器则为空。

如果你坚持console.log(Array.from(result).length)for...of循环之前,length将是2并且人​​造数组将被清空,Array.from()因此for...of循环不返回任何内容。如果你console.log(Array.from(result).length)连续输入两次,结果将是2then 0

如果你不调用before ,但是你在theArray.from(result).length之后只粘贴一次,也是因为它被 清空了。for...oflength0for...of

这是预期的行为。


推荐阅读