您将如何比较两个数组并在两个数组之间进行过滤?

时间:2018-07-07 19:56:11

标签: javascript reactjs debugging

所以我的第一个状态为收藏夹:

enter image description here

这是我的第二个状态watchedFilter:

enter image description here

所以sortedFavorites状态包含watchedFilter状态包含的所有内容,我要做的是比较两个数组并过滤出sortedFavorites和watchedFilter都具有的所有内容。所以我不希望watchedFilter中的任何电影都归于sortedFavorites。

例如:sortedFavorites = {1,2,3,4,5} watchedFilter = {1,2,3} 我想要的结果是:sortedFavorites = {4,5}

这是我尝试过的,但是它什么也没做:

filterFavorites = () => {
    let showFavorites = this.state.sortedFavorites.filter(fav => !this.state.watchedFilter.includes(fav))
    this.setState(state => ({
        ...state,
        ...{ sortedFavorites: showFavorites }
    }));
}

1 个答案:

答案 0 :(得分:0)

您可以创建一个新数组,其中包含sortedFavorites中所有不在watchedFilter中的条目。

由于两个数组中都有单独的对象,includes将不起作用,因为这将检查确切的对象引用。您可以改为检查id是否相同:

filterFavorites = () => {
  this.setState(previousState => {
    const sortedFavorites = previousState.sortedFavorites.filter(
      fav => !previousState.watchedFilter.some(w => w.id === fav.id)
    );

    return { sortedFavorites };
  });
}