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,你也许应该把它作为一个答案贴出来