javascript - 重构两年之间的时间跨度的 if/else 语句

标签 javascript jquery json if-statement merge

我目前正在编写一个网络应用程序。用户可以输入一段时间内的两年,例如 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 是year1 + 3,我们必须将4(!)个不同的列表合并在一起,并且必须写下每个列表。所以我们必须写:

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

但是,我的网络应用程序有 25 年的时间来处理,从 1995 年到 2020 年,这会产生 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 会将常用 key 的值替换为最新的值。如果您需要合并变得有点困难的值(但可行 - 我们只需要一个示例)。

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

相关文章:

javascript - Jquery 停止传播不起作用

jquery - DIV 位置固定,内部内容重叠

javascript - 如何验证此开源工具中的代码不会滥用您的 Google 帐户凭据?

javascript - 如何使用数据 ['file.file' 访问 JSON]?

javascript - 我可以用 JavaScript 影响 CSS 吗?

javascript - Rails4 - 为什么 hidden.bs.modal 没有触发?

javascript - 向事件发射器附加和删除事件

javascript - 从选择列表中删除项目 (Internet Explorer 10)

c# - 如何在JSON数组中按键获取元素

c# - 在 C# 中反序列化 JSON 日期时出现问题 - 添加 2 小时