-3

I have an array with objects. It looks like this

const data = [{name: "Jeslord Thompson", house: "9", class: "2G"},
{name: "Michael Norman", house: "9", class: "3B2"},
{name: "Prince Asiedu", house: "9", class: "1D2"},
{name: "Ronald Eyeson", house: "9", class: "3D3"},
{name: "Ernest Essien", house: "9", class: "2F"},
{name: "Kalikrates", house: "9", class: "1H"},
{name: "Michael Sungnuma", house: "9", class: "2D3"},
{name: "Alidu Wonzooya", house: "9", class: "2E"},
{name: "Shadrach Achambaka", house: "9", class: "2G"},
{name: "Fidel Taylor", house: "9", class: "2P"},
{name: "Emmanuel Buabeng", house: "9", class: "2G"},
{name: "Clement Davour", house: "9", class: "2G"},
{name: "Kingsley Buadi", house: "9", class: "3N"},
{name: "Lommo", house: "9", class: "3H"},
{name: "Jeslord Thompson", house: "9", class: "2G"},
{name: "Michael Norman", house: "9", class: "3B2"},
{name: "Prince Asiedu", house: "9", class: "1D2"},
{name: "Ronald Eyeson", house: "9", class: "3D3"},
{name: "Ernest Essien", house: "9", class: "2F"},
{name: "Kalikrates", house: "9", class: "1H"},
{name: "Michael Sungnuma", house: "9", class: "2D3"},
{name: "Alidu Wonzooya", house: "9", class: "2E"},
{name: "Shadrach Achambaka", house: "9", class: "2G"},
{name: "Fidel Taylor", house: "9", class: "2P"},
{name: "Emmanuel Buabeng", house: "9", class: "2G"},
{name: "Clement Davour", house: "9", class: "2G"}]

What, I want is to be able to count the number of times each name appears in the array and get an array like this for every name in the array above in this format.

[{name: "Jeslord Thompson", count:2}]

This is my attempt

names = data.map(arr => arr.name)

for(var i = 0; i< names.length; i++){
 for(var j = i+1; i<names.length; i++){
    if (names[i] === names[j]){

But I'm stuck, and still thinking of what to do

8
  • 5
    have you tried anything ? Commented Aug 16, 2020 at 16:01
  • This is common use-case for Array.reduce. The documentation literally includes an example titled "Counting instances of values in an object" that counts the number of times a name occurs in an array. Commented Aug 16, 2020 at 16:03
  • See the MDN link Commented Aug 16, 2020 at 16:06
  • This can help you stackoverflow.com/questions/37565828/… Commented Aug 16, 2020 at 16:08
  • @KunalMukherjee, yes I'm trying something like this names = data.map(arr => arr.name) for(var i = 0; i< names.length; i++){ for(var j = i+1; i<names.length; i++){ if (names[i] === names[j]){ But I'm trying to figure out how to do it from here Commented Aug 16, 2020 at 16:09

2 Answers 2

0

const data = [{
    name: "Jeslord Thompson",
    house: "9",
    class: "2G"
  },
  {
    name: "Michael Norman",
    house: "9",
    class: "3B2"
  },
  {
    name: "Prince Asiedu",
    house: "9",
    class: "1D2"
  },
  {
    name: "Ronald Eyeson",
    house: "9",
    class: "3D3"
  },
  {
    name: "Ernest Essien",
    house: "9",
    class: "2F"
  },
  {
    name: "Kalikrates",
    house: "9",
    class: "1H"
  },
  {
    name: "Michael Sungnuma",
    house: "9",
    class: "2D3"
  },
  {
    name: "Alidu Wonzooya",
    house: "9",
    class: "2E"
  },
  {
    name: "Shadrach Achambaka",
    house: "9",
    class: "2G"
  },
  {
    name: "Fidel Taylor",
    house: "9",
    class: "2P"
  },
  {
    name: "Emmanuel Buabeng",
    house: "9",
    class: "2G"
  },
  {
    name: "Clement Davour",
    house: "9",
    class: "2G"
  },
  {
    name: "Kingsley Buadi",
    house: "9",
    class: "3N"
  },
  {
    name: "Lommo",
    house: "9",
    class: "3H"
  },
  {
    name: "Jeslord Thompson",
    house: "9",
    class: "2G"
  },
  {
    name: "Michael Norman",
    house: "9",
    class: "3B2"
  },
  {
    name: "Prince Asiedu",
    house: "9",
    class: "1D2"
  },
  {
    name: "Ronald Eyeson",
    house: "9",
    class: "3D3"
  },
  {
    name: "Ernest Essien",
    house: "9",
    class: "2F"
  },
  {
    name: "Kalikrates",
    house: "9",
    class: "1H"
  },
  {
    name: "Michael Sungnuma",
    house: "9",
    class: "2D3"
  },
  {
    name: "Alidu Wonzooya",
    house: "9",
    class: "2E"
  },
  {
    name: "Shadrach Achambaka",
    house: "9",
    class: "2G"
  },
  {
    name: "Fidel Taylor",
    house: "9",
    class: "2P"
  },
  {
    name: "Emmanuel Buabeng",
    house: "9",
    class: "2G"
  },
  {
    name: "Clement Davour",
    house: "9",
    class: "2G"
  }
]

let result = [];

data.forEach((item) => {
  let resultData = {
    name: item.name,
    count: 0
  }
  let count = data.filter((contact) => {
    return contact.name === item.name;
  });
  resultData.count = count.length;
  result.push(resultData);
});

console.log(result);

Please support with marked as answer if it helps you, thanks.

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

Comments

0

Use Array#reduce to get the structure for each name as property of the new object and then Object#values to convert it to an array.

let arr = [{name: "Jeslord Thompson", house: "9", class: "2G"},
{name: "Michael Norman", house: "9", class: "3B2"},
{name: "Prince Asiedu", house: "9", class: "1D2"},
{name: "Ronald Eyeson", house: "9", class: "3D3"},
{name: "Ernest Essien", house: "9", class: "2F"},
{name: "Kalikrates", house: "9", class: "1H"},
{name: "Michael Sungnuma", house: "9", class: "2D3"},
{name: "Alidu Wonzooya", house: "9", class: "2E"},
{name: "Shadrach Achambaka", house: "9", class: "2G"},
{name: "Fidel Taylor", house: "9", class: "2P"},
{name: "Emmanuel Buabeng", house: "9", class: "2G"},
{name: "Clement Davour", house: "9", class: "2G"},
{name: "Kingsley Buadi", house: "9", class: "3N"},
{name: "Lommo", house: "9", class: "3H"},
{name: "Jeslord Thompson", house: "9", class: "2G"},
{name: "Michael Norman", house: "9", class: "3B2"},
{name: "Prince Asiedu", house: "9", class: "1D2"},
{name: "Ronald Eyeson", house: "9", class: "3D3"},
{name: "Ernest Essien", house: "9", class: "2F"},
{name: "Kalikrates", house: "9", class: "1H"},
{name: "Michael Sungnuma", house: "9", class: "2D3"},
{name: "Alidu Wonzooya", house: "9", class: "2E"},
{name: "Shadrach Achambaka", house: "9", class: "2G"},
{name: "Fidel Taylor", house: "9", class: "2P"},
{name: "Emmanuel Buabeng", house: "9", class: "2G"},
{name: "Clement Davour", house: "9", class: "2G"}];

let result = Object.values(arr.reduce((acc, {name}) => {
    if (acc[name] === undefined)
        acc[name] = {name: name, count: 1};
    else
        acc[name].count++;
    return acc;
},{}));

console.log(result);

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.