Вот метод группировки (не только массивов, но и любых итерируемых объектов):
function group(data, key, val = n => n) {
const getKey = key instanceof Function ? key : n => n[key];
const getVal = val instanceof Function ? val : n => n[val];
const grouped = {};
for (const n of data) {
const k = getKey(n);
(grouped[k] = grouped[k] || []).push(getVal(n));
}
return grouped;
}
Как использовать в вашем случае:
group(arr, 'room')
// или
group(arr, n => n.room)
Но можно и так:
group(Array(5).keys(), n => n % 2 ? 'нечётные' : 'чётные')
Или так:
group('a8-C!39', n => (
n.toLowerCase() !== n.toUpperCase() ? 'буква' :
!Number.isNaN(+n) ? 'цифра' :
'другое'
))
Или вот ещё вариант:
<input name="xxx" value="69">
<input name="xxx" value="187">
<input name="xxx" value="666">
<input name="yyy" value="-1">
group(document.querySelectorAll('input'), 'name', n => +n.value)