var a = [1, 2, 2, 3, 4, 4, 5, 6, 6, 7];
var d = {};
a.forEach(function(value){
if(typeof d[value] == 'undefined')
d[value] = [];
d[value].push(value);
});
var c = Object.keys(d).map(function(key){
return d[key];
});
console.log(c);
Вариант с reduce, учитывает только идущие друг за другом совпадения:
var rrr = [1,2,2,3,4,5,6,6,7];
var c = rrr.reduce(function(a,b){
if(!a.join)
a = [a];
var last = a[a.length - 1];
//если последний элемент не массив и равен текущему
if(!last.join && last == b) {
a[a.length - 1] = [last, b]
}
//если последние элемент массив и первый элемент его равен текущему
else if(last.join && last[0] == b) {
a[a.length - 1].push(b)
} else {
a.push(b);
}
return a;
});
console.log(c);