2
我写了一些我并不感到自豪的代码,并且作为lodash noob,我将不胜感激关于如何改进此代码的一些反馈。如何用lodash改善这个程序?
例如,存在用于每一个折扣(顶行)的每个时隙上左边下降6个表。中午12点在20%折扣栏中有2张桌子等。右侧是每个时段的总数。
我目前拥有的数据格式为:
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>;
}
然后我做一个foreach循环下来的时隙,然后的foreach时隙,通过跨所有折扣另一个foreach循环。然后,如果折扣与X匹配,我检查该时间和折扣是否在另一个数组(折扣20次)中,如果是,则执行一些操作。
该代码有效,但我相信它效率低下 - 我只是不知道用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 ORIGINAL resetDefaults方面对我的做法有些意见:20.270ms resetDefaults:12.751ms resetDefaults:5.770ms resetDefaults:3.367ms resetDefaults:2.509ms resetDefaults:4.228ms WITH对象改变 resetDefaults:14.946ms resetDefaults:6.803ms resetDefaults:2.814ms resetDefaults:1.314ms resetDefaults:1.367ms resetDefaults:2.641ms – Rodney
你的代码是好的,这是一个O(N)操作。关键是适当的对象缓存,所以你只需要在事物改变时运行计算 – TheRealMrCrowley
尽管我仍然对你使用的术语表感到困惑 – TheRealMrCrowley