我目前正在编写一个网络应用程序。用户可以输入一段时间(例如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,因为它相同),因为我们只有一年。

如果year2紧接在year1之后(year2 = year1 + 1),则它们之间没有年份,因此我们只需要两个列表,第一年的一个和第二年的一个,基本上我们将Year1与Year2和繁荣合并,我们列出了从Year1到Year2的所有内容。

如果year2距离较远,那么一切都会变得有些丑陋。在您看到的代码中,如果year2是year1 + 3,我们必须将4(!)个不同的列表合并在一起,并且必须写下每个列表。所以我们必须写:

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


从1995年到2020年,我的网络应用程序Buuut拥有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将用最新的密钥替换公共密钥的值。如果您需要合并值,这会增加一些难度(但可行)-我们只需要一个示例)。

关于javascript - 重构两年间的if/else语句,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38780840/

10-10 02:20