Вы можете уменьшить набор данных в новый массив. Зацикливая элементы, вы можете найти существующую запись в текущем списке результатов, используя функцию ввода.
var data = [
{ "reps": 5, "kg": 10, "exercise": "Leg Curl", "date": "14/10/2019" },
{ "reps": 5, "kg": 10, "exercise": "Biceps Curl", "date": "15/10/2019" },
{ "reps": 5, "kg": 10, "exercise": "Dips", "date": "16/10/2019" },
{ "reps": 5, "kg": 10, "exercise": "Dips", "date": "16/10/2019" }
];
const KeyFilter = (keys) => (data) => keys.map(key => data[key]).join('|');
var exerciseFilter = KeyFilter(['date', 'exercise', 'kg']);
console.log(summarizeData(data, exerciseFilter));
function summarizeData(data, keyFn) {
return data.reduce((results, item, index) => {
let found = results.find(d => keyFn(d) === keyFn(item));
if (found) {
Object.keys(found).forEach(key => {
let value = found[key];
if (typeof value !== 'string') {
found[key] += value; // Only non-string values...
}
});
} else {
results.push(item); // New entry
}
return results;
}, []);
}
.as-console-wrapper { top: 0; max-height: 100% !important; }