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

Javascript Array.find方法有时返回项,有时返回未定义项,javascript,multidimensional-array,find,Javascript,Multidimensional Array,Find,我有一个如下所示的数组: const list = [["GET", /github/g]]; function checkList() { return list.find(i => i[0] === "GET" && i[1].test("github.com")); } 它是一个包含子数组的数组,索引0包含字符串,索引1包含正则表达式 我正在尝试这样做: const list = [["GET", /github/g]]; function checkL

我有一个如下所示的数组:

const list = [["GET", /github/g]];
function checkList() {
    return list.find(i => i[0] === "GET" && i[1].test("github.com"));
}
它是一个包含子数组的数组,索引0包含字符串,索引1包含正则表达式

我正在尝试这样做:

const list = [["GET", /github/g]];
function checkList() {
    return list.find(i => i[0] === "GET" && i[1].test("github.com"));
}
我希望它每次都会返回它找到的列表,但事实并非如此,它会在返回列表和返回未定义的
时来回翻转

下面是一个例子:

设i=1;
const list=[[“GET”,/github/g]];
而(i i[0]=“GET”&&i[1].test(“github.com”))
我++

}
之所以发生这种情况,是因为
i[1]
中的RegExp实际上是有状态的。您的代码调用
i[1]。在奇数迭代中测试(…)
,与
“github.com”
中的
“github”
匹配,并推进
lastIndex
。然后,在下一次偶数迭代中,对
test
的下一次调用无法找到另一个匹配项,到达字符串的末尾。之后,RegExp从字符串的开头重新启动搜索

如果只想检查是否至少找到一次模式,只需删除末尾的
/g
标志即可

来自MDN文档:

与exec()一样(或与exec()结合使用),在同一全局正则表达式实例上多次调用test()将超过上一个匹配项


(请参阅)

作为另一种解决方案,他可能需要使用
string.match(regex)
来代替。尽管如此,我并不认为在这种情况下需要全局匹配。我更倾向于不使用不必要的功能。我正在构建一个其他人将要使用的库,所以我不能仅仅删除/g,因为有人可能希望在url模式中使用它。然而,@QuyetNguyen将其更改为
match
的解决方案似乎起到了作用。谢谢你。@QuyetNguyen,你也许应该把它作为一个答案贴出来