代码之家  ›  专栏  ›  技术社区  ›  BARNOWL

redux选择器没有相应地筛选嵌套数组

  •  0
  • BARNOWL  · 技术社区  · 4 年前

    我试图过滤Likes userId等于params.userId的帖子,现在我得到一个空数组。理想情况下,它应该得到params.userId喜欢的所有帖子。

    选择器

    export const getUserPosts = (params) => {
        return createSelector(
            postSelector,
            (state) => {
                const findIndex = state.posts.findIndex((x) => x.userId == params.userId);
                console.log(findIndex)
                // const likedPosts = state.posts.reduce((acc, cv) => {
                //     const newPosts = {
                //         Likes: cv.Likes.filter((item) => item.userId == params.userId)
                //     }
                //     const newerPosts = newPosts.Likes.length !== 0 ? newPosts.Likes : []
                //     console.log(newerPosts)
    
                //     return { acc, newerPosts }
                // }, [])
                // console.log(likedPosts)
                return state.posts.filter((item) => item.Likes.userId == params.userId)
            }
        )
    }
    

    {
      "id": 7,
      "title": "another testf",
      "postContent": "fsfsfsfsfssfsf",
      "likedByMe": false,
      "likeCounts": 1,
      "userId": 81,
      "createdAt": "2020-01-22T02:59:17.763Z",
      "updatedAt": "2020-01-23T02:49:40.801Z",
      "author": {
        "username": "barnowl2",
        "gravatar": "https://i.pravatar.cc/150?img=11",
        "bio": null
      },
      "Likes": [
        {
          "id": 11,
          "userId": 81,
          "resourceId": 7,
          "createdAt": "2020-01-23T02:32:52.761Z",
          "updatedAt": "2020-01-23T02:32:52.761Z"
        }
      ],
      "Comments": []
    }
    
    1 回复  |  直到 4 年前
        1
  •  2
  •   justinseibert    4 年前

    你有一个多层次的职位和他们喜欢的数组。如果你需要找到与某个特定用户id匹配的like的所有帖子,我想应该是这样的:

    state.posts.filter(post => {
      return post.Likes.find(like => like.userId === params.userId)
    })
    

    .find() 将运行Likes并返回对象或null,这将通知 .filter() 是否包括该职位