Skip to content

increment a value in an array if a match is found

so i’ve got the following array

// movie.json
// example output (beautified) from: /createvote movie#1,movie#2,movie#3,movie#4
[
  {
    "label": "movie#1",
    "value": "movie#1",
    "voteCount": 0
  },
  {
    "label": "movie#2",
    "value": "movie#2",
    "voteCount": 0
  },
  {
    "label": "movie#3",
    "value": "movie#3",
    "voteCount": 0
  },
  {
    "label": "movie#4",
    "value": "movie#4",
    "voteCount": 0
  }
]

created using

movieListArr.map(x => ({label: x, value: x, voteCount: 0}));
    fs.writeFile("movie.json", JSON.stringify( labelArr ), (err) => {
        if (err)
            console.log(err);
        else {
           console.log("writeFile sucess:");
           console.log(fs.readFileSync("movie.json", "utf8"));
        }
    });

and with the following I’m trying to compare it to

interaction.values[0]; // example output: movie#3

that gives me what a person has voted.

what I’m trying to do is if a user votes something ex: movie#3 I want to look through movie.json and increment voteCount by one for movie#3. I’ve tried searching for a solution already and honestly, I can’t seem to put my finger on it. If there’s a better solution to doing this instead of through .json files I’m all ears too 🙂

Answer

You can use Array.find to find the item in the array whose value property is 'movie#3', then increment it’s voteCount property.

const movies=[{label:"movie#1",value:"movie#1",voteCount:0},{label:"movie#2",value:"movie#2",voteCount:0},{label:"movie#3",value:"movie#3",voteCount:0},{label:"movie#4",value:"movie#4",voteCount:0}];

const choice = 'movie#3'

function vote(movieList, vote){
  movieList.find(e => e.value == vote).voteCount++;
}

vote(movies, choice)

console.log(movies)