javascript函数始终返回第一个元素

时间:2018-07-13 08:38:23

标签: javascript jquery if-statement conditional-statements

我具有以下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;
    }

4 个答案:

答案 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;
}