Пока тогда остановлюсь на таком:
var result = { 'left': Infinity, 'top': Infinity, 'right': -Infinity, 'bottom': -Infinity };
while (i--) {
r = arr[i].getBoundingClientRect();
if (result.left > r.left) result.left = r.left;
if (result.top > r.top) result.top = r.top;
if (result.right < r.right) result.right = r.right;
if (result.bottom < r.bottom) result.bottom = r.bottom;
}
Смотрится чуток эстетичнее изначально варианта от
Дзен-трансгуманист, разницы в скорости нет.
Но другие предложения приветствуются.)