Javascript 如何检查某个数组是否已经包含imdbID并防止它再次添加?
每部电影只应该被添加到收藏夹列表中一次,但是这个bug使得每次我更改页面并返回到某个电影页面并添加它时,它都会将自己推到收藏夹数组中。如何检查某个imdbID是否已经存在并阻止应用程序将其添加到状态Javascript 如何检查某个数组是否已经包含imdbID并防止它再次添加?,javascript,reactjs,debugging,Javascript,Reactjs,Debugging,每部电影只应该被添加到收藏夹列表中一次,但是这个bug使得每次我更改页面并返回到某个电影页面并添加它时,它都会将自己推到收藏夹数组中。如何检查某个imdbID是否已经存在并阻止应用程序将其添加到状态 updateFavorites = movie => { if (!this.state.favorites.includes(movie)) { const newFavoriteList = this.state.favorites; newF
updateFavorites = movie => {
if (!this.state.favorites.includes(movie)) {
const newFavoriteList = this.state.favorites;
newFavoriteList.push(movie);
this.setState(state => ({
favorites: newFavoriteList
}));
console.log("Added to your favorites.");
} else {
const newFavoriteList = this.state.favorites;
newFavoriteList.splice(newFavoriteList.indexOf(movie), 1);
this.setState(state => ({
favorites: newFavoriteList
}));
console.log("Removed from your favorites.");
}
};
这就是我从收藏夹列表中添加和删除电影的方式。如评论中所述,您可以使用
.find
或.findIndex
进行比较。此外,您还可以使用.filter
而不是.splice
和.indexOf
删除电影。我个人更喜欢这种方法
updateFavorites = ( movie ) => {
const { favorites } = this.state;
const checkMovie = favorites.find( fav => fav.imdbID === movie.imdbID );
if (!checkMovie) {
return this.setState(
prevState => ( { favorites: [ ...prevState.favorites, movie ] } ) );
}
const newFavoriteList = favorites.filter( fav => fav.imdbID !== movie.imdbID );
this.setState( { favorites: newFavoriteList } );
};
试试这个,它对我有用
let checkArray = favorites.every( (item) => {
return item.imdbID !== newItem.imdbID; // newItem is new element for insert
})
if(checkArray) {
//code for insert newItem
}
你是如何管理国家的?我的最佳猜测是您需要连接到React生活方式(
componentEillReceiveProps
等)Array.prototype.includes
使用sameValueZero方法来确定相等性,也就是说,它会比较对象是否是内存中的相同对象(在本例中)。我不使用include,而是使用Array.prototype.find
或findIndex
,然后检查imdbID并比较它们。这应该是@lemieuxster的答案。