Generalize mapAsObject function