Вы можете использовать reduce
и Object.values
следующим образом:
const matrixArray = [{Responded:1,RowName:'row1',ColName:'col1'},{Responded:2,RowName:'row1',ColName:'col2'},{Responded:0,RowName:'row1',ColName:'col3'},{Responded:0,RowName:'row2',ColName:'col1'},{Responded:0,RowName:'row2',ColName:'col2'},{Responded:1,RowName:'row2',ColName:'col3'},{Responded:1,RowName:'row3',ColName:'col1'},{Responded:0,RowName:'row3',ColName:'col2'},{Responded:1,RowName:'row3',ColName:'col3'}]
const merged = matrixArray.reduce((acc, {Responded,RowName,ColName}) => {
acc[RowName] = acc[RowName] || {RowName};
acc[RowName][ColName] = (acc[RowName][ColName] + Responded) || Responded;
return acc;
}, {});
const output = Object.values(merged);
console.log(output)
Вот более короткая версия приведенного выше кода:
const matrix = [{Responded:1,RowName:'row1',ColName:'col1'},{Responded:2,RowName:'row1',ColName:'col2'},{Responded:0,RowName:'row1',ColName:'col3'},{Responded:0,RowName:'row2',ColName:'col1'},{Responded:0,RowName:'row2',ColName:'col2'},{Responded:1,RowName:'row2',ColName:'col3'},{Responded:1,RowName:'row3',ColName:'col1'},{Responded:0,RowName:'row3',ColName:'col2'},{Responded:1,RowName:'row3',ColName:'col3'}],
output = Object.values(matrix.reduce((a, {Responded,RowName,ColName}) => (
(a[RowName] = a[RowName] || {RowName})[ColName] = Responded, a), {}));
console.log(output);