重构if/else语句,时间跨度在两年之间

Refactoring if/else statement for time span between two years

本文关键字:之间 两年 时间跨度 if else 语句 重构      更新时间:2023-09-26

我目前正在编写一个web应用程序。用户可以输入两年的一段时间,比如2005年和2014年,然后应用程序只显示这两年之间的所有活动,所以更具体地说,用户可以看到2005年、2006年、2007年。。。2014.

为了使这一动态和简单,我只制作了每年的活动列表(json2005,json2006,…(,而不是每个时间跨度的(json2005-2006,json2005-2007(,然后找到了一种方法,将用户选择的年份之间的所有列表合并为该时间跨度的大列表。代码如下:

if (year1 == year2) {
    json = window["json" + year1];
}
else {
    if (year2 == (year1 + 1)) {
        json = $.extend(window["json" + year1], window["json" + (year1+1)]);
    }
    else {
        if (year2 == (year1 + 2)) {
            json = $.extend(window["json" + year1], window["json" + (year1+1)], window["json" + (year1+2)]);
        }
        else {
            if (year2 == (year1 + 3)) {
                json = $.extend(window["json" + year1], window["json" + (year1+1)], window["json" + (year1+2)], window["json" + (year1+3)]);
            }
        }
    }
}

(如果你想知道这意味着什么,window[]是一种使变量动态的方法。(

解释代码:

如果year1等于year2,一切都很清楚,我们只需要列出year1(我们也可以使用year2,因为它是一样的(,因为我们只有一年。

如果年份2直接在年份1之后(年份2=年份1+1(,它们之间没有年份,所以我们只需要两个列表,第一年和第二年的列表,基本上我们将年份1与年份2合并,然后繁荣起来,我们有一个大列表,其中包括从年份1到年份2的所有内容。

如果第二年离得更远,一切都会变得有点丑陋。在你看到的代码中,如果year2是year1+3,我们必须将4(!(个不同的列表合并在一起,并将每个列表都写下来。所以我们必须写:

json = $.extend(window["json" + year1], window["json" + (year1+1)], window["json" + (year1+2)], window["json" + (year1+3)]);

Buuut,从1995年到2020年,我的网络应用程序有25年的时间来处理,它产生了325条不同的合并线。

我的问题是:有没有办法让它比现在短得多?

因为我认为有一种方法,我只是没有足够的JavaScript经验和方法知识来自己找到它。我的意思是,问题很简单,我们只需要一个指数或一种方法来知道两年之间的差异,来宣布我们需要合并多少年,但在这里我放弃了。

我也有使用因子分解的想法,但这对我的头脑来说太复杂了。但因子分解可能是关键词,是解决方案的线索。我真的不知道。如果我能把if/else语句写进$.extend()中,也许它也会有所帮助;函数(我可以吗?(。

这个怎么样?

json = data["json" + year1];
var this_year = year1 + 1;
while(this_year <= year2) {
   json = $.extend(json, data["json" + this_year]);
   this_year = this_year + 1;
}

它将随着每年的数据逐步扩展,而不是试图一次扩展所有内容。请注意,$.extend将用最新的值替换公共密钥的值。如果你需要合并这些值,这会变得有点困难(但这是可行的——我们只需要一个例子(。