How about something like this:
function compressArray(original, maxOccurrences) {
if (!original) { return null; }
if (maxOccurrences < 1) { return []; }
var result = [];
var itemCounts = {};
for (var index = 0; index < original.length; index++){
var item = original[index];
var count = itemCounts[item] || 0;
if (count < maxOccurrences) {
result.push(item);
itemCounts[item] = count + 1;
}
}
return result;
}
Demo[
^]