我具有以下javascript函数来检查链接,并基于该链接是曲目还是专辑,它应从该链接中提取ID,但它永远不会传递第一个if语句,它将始终提醒找到跟踪链接,即使我提供了相册链接,也将不胜感激。 链接如下所示:
https://open.spotify.com/album/1XGo0OD90wIlRccwLe29L9?si=egthfx9CRfuPIhLJ1uXCPA
https://open.spotify.com/track/1SWyGZhn3nyLUZRfWvQ0to?si=Tl-fwsqxQf-J8gZWps2PqQ
function getLinkID(link) {
if(link.indexOf("spotify")) {
if(link.indexOf("track")) {
alert("found track in link");
var linkID = link.split('track/').pop().split('?')[0];
} else if(link.indexOf("album")) {
alert("found album in link");
var linkID = link.split('album/').pop().split('?')[0];
}
} else if(link.indexOf("apple")) {
}
return linkID;
}
答案 0 :(得分:2)
indexOf
返回匹配项的索引号,如果没有匹配项,则返回-1
。另外,如果在first
索引处存在匹配项,则它将返回0
,即false
,这将破坏您的代码。您应该使用includes
。
更新自
link.indexOf("spotify")
到
link.includes("spotify")
请注意,如果您使用的是IE,includes
将不起作用。对于IE,您将需要创建一个polyfill或将条件更新为link.indexOf("spotify") !== -1
答案 1 :(得分:1)
函数总是返回第一个元素
这里的问题是,即使索引中没有出现该单词,第一个条件也始终是true
,即使该词未出现在链接中,因为0
返回link.indexOf("spotify")
或index
。
因此,当找不到该单词时,它将返回-1
值,即-1
,这就是为什么条件为truthy
的原因,您可以通过键入{{ 1}}。
您需要检查返回的true
是否高于Boolean(-1)
,以便可以正确评估条件:
index
答案 2 :(得分:0)
IndexOf如果找不到,则返回-1,并且-1为真值。因此它将始终返回true。
答案 3 :(得分:-1)
尝试一下:)
function getLinkID(link) {
if (link.indexOf("spotify") > -1) {
if (link.indexOf("track") > -1) {
alert("found track in link");
var linkID = link.split('track/').pop().split('?')[0];
} else if(link.indexOf("album") > -1) {
alert("found album in link");
var linkID = link.split('album/').pop().split('?')[0];
}
} else if(link.indexOf("apple") > -1) {
}
return linkID;
}