Jayson H Jayson H - 25 days ago 18
Javascript Question

Using lodash to return an array of unique values while removing non unique

I'm trying to return the survey the visitor hasn't voted on, by survey_id. Using the example arrays below, I would expect survey_id: 4 to be returned.

What would be the best way to accomplish this?

Here are my example arrays:



// Survey Object
[{
survey_id: 1,
name: 'Survey 1",
question: "This is a survey question"
}, {
survey_id: 2,
name: 'Survey 2",
question: "This is a another survey question"
}, {
survey_id: 3,
name: 'Survey 3",
question: "This is a another 3 survey question"
}, {
survey_id: 4,
name: 'Survey 4",
question: "This is a another 4 survey question"
}]

// Votes
[{
vote_id: 11,
visitor_token: "aDe4GggAe3",
survey_id: 1
}, {
vote_id: 12,
visitor_token: "aDe4GggAe3",
survey_id: 2
}, {
vote_id: 13,
visitor_token: "aDe4GggAe3",
survey_id: 3
}]




Answer

You could use a combination of _.filter and _.find to apply a filter function to your survey collection, which filters out surveys when matching survey_id is found in votes collection. See this sample getUnansweredSurveys function:

function getUnansweredSurveys(surveys, votes) { 
  return _.filter(surveys, function(survey) { 
    return !_.find(votes, {survey_id: survey.survey_id})
  }) 
}
Comments