[ 0, 1, 1, 1, 1, 2, 2, 2, 3, 4, 4, 4 ]
[ 0, [1, 1, 1, 1], [2, 2, 2], 3, [4, 4, 4] ]
const result = arr
.reduce((acc, n, i, a) => (
a[i - 1] !== n && acc.push([ n, 0 ]),
acc[acc.length - 1][1]++,
acc
), [])
.map(([ v, c ]) => c === 1 ? v : Array(c).fill(v));
const result = arr
.reduce((acc, n, i, a) => (
a[i - 1] === n || acc.push([]),
acc[acc.length - 1].push(n),
acc
), [])
.map(n => n.length === 1 ? n[0] : n);