Я бы посоветовал вам использовать функцию Array # Reduce.В моем понимании это выглядит очень читабельным.
let docArray = [{
documentID: 304717110,
doublettenID: 111,
done: true
},
{
documentID: 304717110,
doublettenID: 222,
done: true
},
{
documentID: 304717110,
doublettenID: 333,
done: true
},
{
documentID: 304717110,
doublettenID: 444,
done: true
},
{
documentID: 304717110,
doublettenID: 555,
done: true
},
{
documentID: 304717110,
doublettenID: 666,
done: true
},
{
documentID: 304862280,
doublettenID: null,
done: true
},
{
documentID: 304862281,
doublettenID: null,
done: true
},
{
documentID: 304933685,
doublettenID: null,
done: true
},
{
documentID: 304933871,
doublettenID: null,
done: true
},
{
documentID: 304933870,
doublettenID: null,
done: true
},
{
documentID: 304862282,
doublettenID: null,
done: true
}
];
const ar = docArray.reduce((a, c) => {
debugger;
let filtered = a.filter(el => el.documentID === c.documentID);
if (filtered.length > 0) {
a[a.indexOf(filtered[0])].doublettenID.push(c.doublettenID);
} else {
if (c.doublettenID !== null) {
let originalValue = c.doublettenID;
c.doublettenID = [];
c.doublettenID.push(originalValue);
}
a.push(c);
}
return a;
}, []);
$('#pre').text(JSON.stringify(ar));