我用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()
}
})
3条答案
按热度按时间lymgl2op1#
与其使用你的直觉,为什么不在输入if else语句之前尝试console.log你的isRepeated变量?传统的方法在大多数时候都有效,值得麻烦😀。
例如
ajsxfq5m2#
你能告诉我你是如何调用这个函数的吗?此外,使用console.log进行调试是一个很好的主意。你可以在if检查之前添加日志来确认值。我已经在一个单独的编辑器上测试了你的代码,似乎只有当isAdding为true时,才会显示“Film already in your watchlist”。
这就是我如何使用你的函数。
希望有帮助。
0dxa2lsx3#
这个问题与if语句无关,它是由于我如何在.js文件和不同的.HTML文件之间组织我的代码。
感谢所有试图帮助我的人,我很快就会删除这个问题。