0

I'm attempting to filter info based on a favorite.userId. This is what I'd want, however throughout my experiment, I got an empty array.

I'm attempting to map the favorite as indicated below. favorite.userId, and filtering it with user to retrieve data with the same user Id or the inputted data. Please let me know, or I'll clarify what I'm talking about.

const data = [{
  name: "Alif",
  favorites: [{
      _id: "60fe705efc8be22860620d3b",
      userId: "60eaa1b020fa782758751285",
      username: "Alif",
      createdAt: "2021-07-26T08:20:46.522Z",
    },
    {
      _id: "60fe125efc8be22860620d3b",
      userId: "60eaa19820fa782758751285",
      username: "Alif",
      createdAt: "2021-07-26T08:20:46.522Z",
    },
  ],
}, ];

const user = {
  id: "60eaa1b020fa782758751285",
};

const favoriteUser = data.map(({
  favorites
}) => {
  return favorites.map((favorite) => {
    return favorite.userId;
  });
});

const wishlist = data.filter(() => {
  return favoriteUser == user.id;
});

console.log(wishlist);

3 Answers 3

2

You can use this:

const data = [{
  name: "Alif",
  favorites: [{
      _id: "60fe705efc8be22860620d3b",
      userId: "60eaa1b020fa782758751285",
      username: "Alif",
      createdAt: "2021-07-26T08:20:46.522Z",
    },
    {
      _id: "60fe125efc8be22860620d3b",
      userId: "60eaa19820fa782758751285",
      username: "Alif",
      createdAt: "2021-07-26T08:20:46.522Z",
    },
  ],
}, ];

const user = {
  id: "60eaa1b020fa782758751285",
};

const wishlist = data.map(({
  favorites
}) => favorites.filter(favorite => favorite.userId == user.id)).flat();

console.log(wishlist);

The map call produces array of favorite arrays which we then filter by the user ID. We can then flatten the arrays.


You can also move the flat call to the middle of map and filter. Then the filter call must happen on the flattended array. This also results in more readable code.

const data = [{
  name: "Alif",
  favorites: [{
      _id: "60fe705efc8be22860620d3b",
      userId: "60eaa1b020fa782758751285",
      username: "Alif",
      createdAt: "2021-07-26T08:20:46.522Z",
    },
    {
      _id: "60fe125efc8be22860620d3b",
      userId: "60eaa19820fa782758751285",
      username: "Alif",
      createdAt: "2021-07-26T08:20:46.522Z",
    },
  ],
}, ];

const user = {
  id: "60eaa1b020fa782758751285",
};

const wishlist = data
    .map(({ favorites }) => favorites)
    .flat()
    .filter(favorite => favorite.userId == user.id);

console.log(wishlist);

The data flow visualized:

data flow image

Sign up to request clarification or add additional context in comments.

1 Comment

See the edit – more readable version was added.
0

Perhaps something like this?

It is not clear what you want to find after finding the favourite user

const data = [{
  name: "Alif",
  favorites: [{
      _id: "60fe705efc8be22860620d3b",
      userId: "60eaa1b020fa782758751285",
      username: "Alif",
      createdAt: "2021-07-26T08:20:46.522Z",
    },
    {
      _id: "60fe125efc8be22860620d3b",
      userId: "60eaa19820fa782758751286",
      username: "Alif",
      createdAt: "2021-07-26T08:20:46.522Z",
    },
  ],
}, ];

const user = {
  id: "60eaa1b020fa782758751285",
};

const favoriteUser = data[0].favorites.map((favorite) => {
  return favorite.userId;
}); // this just confirms we have it

console.log(favoriteUser);

const wishlist = data.filter(item => {
  return favoriteUser.includes(user.id);
});

console.log(wishlist);

1 Comment

Thanks for answering will give it a tryy
0

const data = [
        {
            name: "Alif",
            favorites: [
                {
                  _id: "60fe705efc8be22860620d3b",
                  userId: "60eaa1b020fa782758751285",
                  username: "Alif",
                  createdAt: "2021-07-26T08:20:46.522Z",
                },
                {
                  _id: "60fe125efc8be22860620d3b",
                  userId: "60eaa19820fa782758751285",
                  username: "Alif",
                  createdAt: "2021-07-26T08:20:46.522Z",
                },
            ],
        },
    ];

const user = {
  id: "60eaa1b020fa782758751285",
};

var favoriteUser = data.map(function(value){
    return value['favorites'].map(function(value){
        return value['userId'];
    });
});

const wishlist = data.filter(function(value) {
  return check(user['id']);
});

function check(value)
{
    flag = false;
    favoriteUser.forEach(
        function(Value1)
        {
                Value1.forEach(
                function(userValue)
                {
                    if(value == userValue)
                    {
                        flag=true;
                    }
                }
            )
        }
    )
    return flag;
}
console.log(wishlist);

  • I think there is some error in your logic refer above code.

  • I used function favouriteUser to fetch all the user IDs and use filter function of array to filter the required user.

  • I implemented check function to check whether the UserID is match or not for filter function

  • Hope this will solve your problem.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.