javascript 如果语句没有按照应有的方式运行

zi8p0yeb  于 2023-03-21  发布在  Java
关注(0)|答案(3)|浏览(89)

我用javascript写了这个函数,它应该在数组中添加和删除对象,并提醒它正在这样做。

function modifyWatchlist(id, boolean, array)  {
    const isAdding = boolean
    const targetMovie = array.filter(movie => movie.imdbID === id)
    const isRepeated = watchlist.find(movie => movie.imdbID === id)
    
    if (isAdding && isRepeated != undefined) {
        alert('Film already in your watchlist')
    } 
    else if (isAdding && isRepeated === undefined) {
        // watchlist.push(targetMovie[0])
        // localStorage.setItem('watchlist', JSON.stringify(watchlist))
        alert('Film added to your watchlist')
    }
    else if (!isAdding) {
        // const newWatchlist = watchlist.filter(movie => movie.imdbID !== id)
        // localStorage.setItem('watchlist', JSON.stringify(newWatchlist))
        alert('Film removed from your watchlist')
    }   
}

当运行上面的代码时,alert('Film already in your watchlist')语句甚至在isAdding === false时也运行。我不理解这背后的逻辑,也找不到修复它的方法。alert('Film removed from your watchlist')语句仍然按预期工作,但alert('Film already in your watchlist')总是先运行。
这是调用函数的一种方式:

document.addEventListener('click', (e) => {
    const id = e.target.dataset.id
    if (id) {
        modifyWatchlist(id, true, currentMovies)
    }
    else if (e.target.id === 'search-btn') {
        e.preventDefault()
        getMoviesArray()
    }
})

这是调用此函数的另一种方式

document.addEventListener('click', (e) => {
                const id = e.target.dataset.id
                if (e.target.dataset.id) {
                    modifyWatchlist(id, false, watchlist)
                    initWatchlist()
                }
            })
lymgl2op

lymgl2op1#

与其使用你的直觉,为什么不在输入if else语句之前尝试console.log你的isRepeated变量?传统的方法在大多数时候都有效,值得麻烦😀。
例如

console.log("test1: " + isRepeated != undefined)
console.log("test2: " + isRepeated === undefined)
console.log("test3: " + isAdding)
ajsxfq5m

ajsxfq5m2#

你能告诉我你是如何调用这个函数的吗?此外,使用console.log进行调试是一个很好的主意。你可以在if检查之前添加日志来确认值。我已经在一个单独的编辑器上测试了你的代码,似乎只有当isAdding为true时,才会显示“Film already in your watchlist”。
这就是我如何使用你的函数。

watchlist = [{"imdbID": 1}]
array = [{"imdbID": 1}]
modifyWatchlist(1, false, array)

希望有帮助。

0dxa2lsx

0dxa2lsx3#

这个问题与if语句无关,它是由于我如何在.js文件和不同的.HTML文件之间组织我的代码。
感谢所有试图帮助我的人,我很快就会删除这个问题。

相关问题