Skip to content
Advertisement

How can I remove a number of objects in an array?

I have an array like this :

const myArray = [ 
  {
    title: 'title',
    category: 'genetic-diseases'
  },
  {
    title: 'title',
    category: 'genetic-disorders'
  },
  { title: 'title', category: 'genetic-disorders' },
  {
    title: 'title',
    category: 'genetic-disorders'
  },
  {
    title: 'title',
    category: 'genetic-mutation'
  },
  {
    title: 'title',
    category: 'genetic-mutation'
  },
  {
    title: 'title',
    category: 'genetic-mutation'
  }
]

I only want two of each of category object in the array and remove the rest If the number of objects of that category is over 2 and get something like this :

const myArray = [ 
  {
    title: 'title',
    category: 'genetic-diseases'
  },
  { title: 'title', category: 'genetic-disorders' },
  {
    title: 'title',
    category: 'genetic-disorders'
  },
  {
    title: 'title',
    category: 'genetic-mutation'
  },
  {
    title: 'title',
    category: 'genetic-mutation'
  }
]

How can I remove the rest of the objects of a specific category If the number of those objects in the array is over 2 ?

Advertisement

Answer

    const myArray = [ 
    {
    title: 'title',
    category: 'genetic-diseases'
    },
    {
    title: 'title',
    category: 'genetic-disorders'
    },
    { title: 'title', category: 'genetic-disorders' },
    {
    title: 'title',
    category: 'genetic-disorders'
    },
    {
    title: 'title',
    category: 'genetic-mutation'
    },
    {
    title: 'title',
    category: 'genetic-mutation'
    },
    {
    title: 'title',
    category: 'genetic-mutation'
    }
    ];
    
    var categoryQuantities = {}; //counts how many objects from each category entered the filtered array
    var filteredArray = []; //array with first 2 objects from each categoty
    for (var obj of myArray) {
        var category = obj.category;
        if (category in categoryQuantities) {
            categoryQuantities[category]++;
        } else {
            categoryQuantities[category] = 1;
        }
        
        if (categoryQuantities[category] <= 2) {
            filteredArray.push(obj);
        }
    }
    
    console.log(filteredArray);

The final array is in ‘filteredArray’. The original array is not changed, so you may want to do the following:

    myArray = filteredArray;
User contributions licensed under: CC BY-SA
1 People found this is helpful
Advertisement