javascript - 过滤两个数组中的重复项

标签 javascript arrays reactjs filter use-state

我正在尝试从两个数组中过滤重复项...

responseData.posts 和 fbFormattedPosts 都是 post 对象的数组。有些帖子出现在两个数组中,具有相同的“postId”。我想将我的状态设置为包含所有responseData.posts帖子的数组...然后我想将fbFormattedPosts添加到该数组 - 但我不想包含具有相同“postId”的fbFormattedPosts。

我使用 useState 函数 setPosts 设置“帖子”useState 数组。如果我对它们使用展开运算符,它们都会添加每个数组中的所有帖子。这可行,但我最终得到了重复的帖子。

//set All Posts
        setPosts([ ...responseData.posts, ...fbFormattedPosts])

因此,我尝试比较 Id 以将其过滤掉。

setPosts([ ...responseData.posts, fbFormattedPosts.forEach(fbPost => {
            responseData.posts.filter(resPost => {
                if(fbPost.postId !== resPost.postId ){
                    return fbPost
                }
            })
        })])

显然这不起作用...现在我根本没有收到任何帖子。甚至没有responseData.posts。

最佳答案

按照你的逻辑,fbFormattedPosts应该根据responseData.posts中缺少的postId进行过滤,所以你需要的只是查找匹配(例如使用一些方法,如 Array.prototype.find() 或 Array.prototype.some() ,它们将被评估为 true 并在匹配时立即退出) Array.prototype.filter() 并且不要忘记传播过滤器的结果(使用 ...):

setPosts([ 
   ...responseData.posts, 
   ...fbFormattedPosts
      .filter(fbPost => 
         !responseData.posts
            .find(post => 
               post.postId == fbPost.postId
            )
      )
])

关于javascript - 过滤两个数组中的重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61717585/

相关文章:

javascript - 当任何复选框值更改时启用按钮

javascript - jQuery Ajax 成功函数参数

c++ - 取消引用一个指向数组类型的结束指针

php - 同一范围内的两个 foreach 具有相同的变量名(第一个使用引用)

javascript - React Native,没有为索引未定义定义路由

javascript - 为什么我应该从 Axios 调用中返回 "undefined",而它应该返回对象?

javascript - 函数的运行时执行过程

JavaScript整数数学不正确的结果

javascript - 在数组中找到所有可能的子集组合?

javascript - 根据 prop 有条件地添加元素