Tach!
Meine erste Lösung war zwar auch eienn Schritt zu umständlich (das Zwischen-Array), aber hier kann man auch noch mal den Rotstift ansetzen.
let o = Object.create(proto || new Object());
Statt let geht auch const. Der Variable o wird in ihrem Geltungsbereich kein weiterer Wert zugewiesen. Dass dem Objekt die Eigenschaften geändert werden, ist für const nicht von Belang.
Object.create(proto || new Object()) kann man zu proto || {} verkürzen. Der Unterschied ist, wenn jemand kein Objekt für proto übergibt, gibts bei dir eine Exception, bei der kurzen Variante hingegen "Garbage In, Garbage Out". Zumindest das new Object() geht als {} zu vereinfachen.
return cols.foreach((c,i) => o[c] = values[i], o);
Das geht so nicht, man muss schon das o zurückgeben und nicht das undefined vom forEach(), was man auch noch mit großem E schreiben muss.
dedlfix.