Вы можете использовать Array#forEach
без накладных расходов для назначения объекта и возврата объекта для каждого цикла.
var teacherList = [{ teacherID: 1, teacherName: "john" }, { teacherID: 2, teacherName: "joe" }, { teacherID: 3, teacherName: "jill" }, { teacherID: 1, teacherName: "john" }, { teacherID: 2, teacherName: "joe" }, { teacherID: 3, teacherName: "jill" }, { teacherID: 1, teacherName: "john" }, { teacherID: 2, teacherName: "joe" }, { teacherID: 3, teacherName: "jill" }],
frequency = Object.create(null);
teacherList.forEach(({ teacherName }) => frequency[teacherName] = (frequency[teacherName] || 0) + 1);
console.log(frequency);