I recently had a programming interview with a Silicon Valley tech company and wanted some different opinions on one of the problems they had me solve and how others might complete it. Essentially, given an array of objects:
const events = [
{'category': 'Bug',
'date': '26.07.22',
'resolved': false},
{'category': 'Breach',
'date': '26.07.22',
'resolved': false},
{'category': 'Bug',
'date': '24.07.22',
'resolved': true},
{'category': 'Bug',
'date': '24.07.22',
'resolved': true},
{'category': 'Bug',
'date': '24.07.22',
'resolved': false},
{'category': 'Restart',
'date': '22.07.22',
'resolved': true},
{'category': 'Breach',
'date': '21.07.22',
'resolved': false}]
Return another array of objects to the user that list the unique category names and how many of them were found in the original array, like so:
[{category: 'Breach', count: 2}, {category: 'Bug', count: 4}, {category: 'Restart', count: 1}]
How I managed it:
let categoryArray = [];
for (let i = 0; i < events.length; i++) {
categoryArray[i] = events[i].category;
}
categoryArray.sort();
let count = 1;
let finalObjectArray = [];
for (let i = 0; i < categoryArray.length; i++) {
let blankObject = { category: "", count: "" };
let curr = categoryArray[i];
let next = categoryArray[i + 1];
if (curr === next) {
count++;
} else {
blankObject.category = categoryArray[i];
blankObject.count = count;
finalObjectArray.push(blankObject);
count = 1;
}
}