Одним из решений будет выравнивание двух периодов. Например, добавление записи с именем пропавшего клиента и общим объемом продаж 0. Я не знаю, как нравится ваш json, но, возможно, вам следует также предположить, что порядок клиентов может отличаться для разных периоды. Сортировка обоих по имени может быть решением.
Вы можете придумать что-то вроде этого для выравнивания обоих периодов:
interface CustomerReport {
name: string;
totalSales: number;
}
alignPeriods(firstPeriod: CustomerReport[], secondPeriod: CustomerReport[]) {
const alignedFirstPeriod: CustomerReport[] = Object.assign([], firstPeriod);
const alignedSecondPeriod: CustomerReport[] = [];
firstPeriod.forEach(customer => {
const secondCustomer = secondPeriod.find(secCustomer => secCustomer.name === customer.name);
if (!secondCustomer) {
alignedSecondPeriod.push({name: customer.name, totalSales: 0});
} else {
alignedSecondPeriod.push(secondCustomer);
}
});
secondPeriod.forEach(customer => {
const firstCustomer = firstPeriod.find(fstCustomer => fstCustomer.name === customer.name);
if (!firstCustomer) {
alignedFirstPeriod.push({name: customer.name, totalSales: 0});
alignedSecondPeriod.push(customer);
}
});
const alignedCustomers = [alignedFirstPeriod, alignedSecondPeriod];
return alignedCustomers;
}
Эта функция гарантирует, что оба массива находятся в одном порядке, и добавляет новая запись с totalSales: 0 для всех клиентов, которых нет в другой период. Это предполагает, что имена ваших клиентов являются уникальными идентификаторами.
Теперь вы можете l oop по обоим выровненным массивам в вашем шаблоне.
Это будет работать, но это не чистое решение, вам следует подумать об изменении вашей модели данных, как упоминал Курт Гамильтон его ответ.