Я написал код, которым я не горжусь, и как lodash noob Я был бы признателен за некоторые отзывы о том, как улучшить этот код.Как улучшить эту рутину с помощью lodash?
Требования, чтобы заполнить массив временных интервалов со значениями по умолчанию для определенных типов скидок, например:
К примеру, есть 6 столов для каждой скидки (верхний ряд) для каждого из временных интервалов, идущих вниз по левому , В 12:00 вечера есть 2 таблицы в столбце скидки 20% и т. Д. С правой стороны - итоговые значения для каждого временного интервала.
я в настоящее время данных в этом формате:
class DiscountTimeTable {
public restaurantScheduleDiscountId: number;
public scheduleDiscountId: number;
public name: string;
public tables: number;
}
class TablesForTimesAndDiscount {
public restaurantScheduleDayTimeId: number;
public timeSlot: string;
public discounts: Array<DiscountTimeTable>;
}
И тогда я делаю петлю Еогеаспа вниз по временным интервалам, а затем Еогеасп временной интервал, еще один цикл Еогеаспа через через все скидки. Затем, если скидка соответствует X, я проверяю, находится ли это время и скидка в другом массиве (discount20Times), и если да, сделайте что-нибудь.
Код работает, но я уверен, что он неэффективен - я просто не знаю, какой подход взять с Lodash, чтобы улучшить его?
public resetDefaults(): void {
let discount10Times: string[] = ['PT13H30M', 'PT16H30M', 'PT19H30M', 'PT22H30M'];
let discount20Times: string[] = ['PT12H', 'PT12H30M', 'PT13H', 'PT17H', 'PT17H30M', 'PT18H', 'PT18H30M', 'PT19H', 'PT23H'];
_.forEach(this.tablesForTimesAndDiscounts, (tablesForTimesAndDiscount: TablesForTimesAndDiscount) => {
_.forEach(tablesForTimesAndDiscount.discounts, (discount: DiscountTimeTable) => {
if (discount.scheduleDiscountId === 0) {
discount.tables = 6; //regardless of time - all tables
}
if (discount.scheduleDiscountId === 10) {
if (_.find(discount10Times, (time: string) => time == tablesForTimesAndDiscount.timeSlot)) {
discount.tables = 2;
}
}
if (discount.scheduleDiscountId === 20) {
if (_.find(discount20Times, (time: string) => time == tablesForTimesAndDiscount.timeSlot)) {
discount.tables = 2;
}
}
});
});
}
Хм, да, это, как правило, сокращало вдвое время в среднем, спасибо. Я все еще ищу какой-то обратной связи на моем подходе с точки зрения lodash ОРИГИНАЛЬНЫХ resetDefaults: 20.270ms resetDefaults: 12.751ms resetDefaults: 5.770ms resetDefaults: 3.367ms resetDefaults: 2.509ms resetDefaults: 4.228ms с объектными ПЕРЕМЕН resetDefaults: 14.946ms resetDefaults: 6.803ms resetDefaults: 2.814ms resetDefaults: 1.314ms resetDefaults: 1.367ms resetDefaults: 2.641ms – Rodney
вы код прекрасно, это операция O (N). ключ - это правильное кэширование объектов, поэтому вам нужно только выполнять вычисления, когда вещи меняются – TheRealMrCrowley
, хотя я все еще запутался в использовании таблиц терминов – TheRealMrCrowley