Javascript 如何检查某个数组是否已经包含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

每部电影只应该被添加到收藏夹列表中一次,但是这个bug使得每次我更改页面并返回到某个电影页面并添加它时,它都会将自己推到收藏夹数组中。如何检查某个imdbID是否已经存在并阻止应用程序将其添加到状态

 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的答案。