ещё вариант
function toObj(arr) {
const str = arr.join('.');
const obj = {};
let len = -1;
for (let i = 0; i < arr.length; ++i) {
len += arr[i].length + 1;
obj['col_' + (i + 1)] = str.substr(0, len);
}
return obj;
}
alert(JSON.stringify(toObj(['1', '2', '3', '4']), '', 4));
по идее, должно быть более экономным по памяти: если предположить, что join реализовано оптимально, то сразу выделяется подходящего размера буфер под строку, который потом переиспользуется в строках, созданных через substr, т.е. сложность выглядит быть линейная.