Javascript Array.find方法有时返回项目,有时未定义。

问题描述 投票:0回答:1

我有一个数组,是这样的。

const list = [["GET", /github/g]];

这是一个带子数组的数组,索引0是一个字符串,索引1是一个正则表达式。

我想做这样的事情。

function checkList() {
    return list.find(i => i[0] === "GET" && i[1].test("github.com"));
}

我希望每次都能返回找到的列表,但事实并非如此,它在返回列表和返回正则表达式之间来回切换。undefined.

下面是一个例子。

let i = 1;
const list = [["GET", /github/g]];
while (i <=10) {
    console.log(list.find(i => i[0] === "GET" && i[1].test("github.com")))
    i++
}

在这个例子中,我只是通过它循环并记录结果,以显示它返回列表和 undefined 每隔一段时间。这到底是怎么回事?

javascript multidimensional-array find
1个回答
1
投票

出现这种情况是因为 i[1] 实际上是有状态的。你的代码调用 i[1].test(...) 在奇数迭代上,与 "github""github.com",并推进 lastIndex. 然后,在下一次偶数迭代时,下一次对 test 未能找到另一个匹配项,到达字符串的末端。之后,正则函数会从字符串的开头重新开始搜索。

如果你只想检查模式是否至少被找到一次,你可以简单地删除了 /g 标志。

来自 MDN 文档。

和exec()一样(或者和它结合使用),在同一个全局正则表达式实例上多次调用test(),会使之前的匹配提前。

(参见 https:/developer.mozilla.orgen-USdocsWebJavaScriptReferenceGlobal_ObjectsRegExptest。)

© www.soinside.com 2019 - 2024. All rights reserved.