Я хотел бы объединить количественные значения объектов, если значения ohmage, допусков и мощности совпадают с предыдущими проверенными объектами. Начальный объект:
var x = [{
date: "2020",
ohmage: "1k45",
quantity: 5000,
tolerance: 5,
wattage: 2
}, {
date: "2020",
ohmage: "9k34",
quantity: 1000,
tolerance: 2,
wattage: 0.125
}, {
date: "2020",
ohmage: "1k45",
quantity: 3000,
tolerance: 2,
wattage: 2
}, {
date: "2020",
ohmage: "1k45",
quantity: 3500,
tolerance: 5,
wattage: 2
}, {
date: "2020",
ohmage: "1k45",
quantity: 500,
tolerance: 5,
wattage: 0.5
}];
Желаемый объект:
var x = [{
date: "2020",
ohmage: "1k45",
quantity: 8500,
tolerance: 5,
wattage: 2
}, {
date: "2020",
ohmage: "9k34",
quantity: 1000,
tolerance: 2,
wattage: 0.125
}, {
date: "2020",
ohmage: "1k45",
quantity: 3000,
tolerance: 2,
wattage: 2
}, {
date: "2020",
ohmage: "1k45",
quantity: 500,
tolerance: 5,
wattage: 0.5
}];
Я посмотрел на Объединить дублирующиеся объекты в массиве объектов и переделал функцию, но это не так t объединить все объекты, которые должны быть объединены. Моя текущая функция:
var seen = {};
array = array.filter(entry => {
var previous;
// Have we seen this ohmage before?
if (seen.hasOwnProperty(entry.ohmage)) {
if (entry.tolerance == seen[entry.ohmage].tolerance && entry.wattage == seen[entry.ohmage].wattage) {
console.log(true)
// Yes, grab it and add this quantity to it
previous = seen[entry.ohmage];
previous.quantity.push(entry.quantity);
// Don't keep this entry, we've merged it into the previous one
return false;
}
}
// entry.quantity probably isn't an array; make it one for consistency
if (!Array.isArray(entry.quantity)) {
entry.quantity = [entry.quantity];
}
// Remember that we've seen it
seen[entry.ohmage] = entry;
// Keep this one, we'll merge any others that match into it
return true;
});