循环遍历数组插入值到javascript中

时间:2010-10-26 16:52:16

标签: javascript

我已经使用来自Web服务的数据包填充了一个数组,并且需要根据过去6年填充UI,即使它们不存在于数据中。返回的数据可能是UI不完整的,所以我需要做的是在数组中为“缺失的部分”插入值。

实施例

数据返回{2010,2007}

我的javascript代码必须做的是循环返回的数据,检查索引的值,并在需要的地方插入值。

用户界面返回(2010年,2009年,2008年,2007年,2006年,2005年)

同样在3年内,日期发生变化(当前年份为2013年)

数据返回{2011,2009,2008} UI返回{2013,2012,2011,2010,2009,2008}


数组中填充了来自webservice的返回,webservice只将值放入数据库中存在的数组中,但UI需要显示2010-2006范围内的所有值(即过去6年的数据) ,所以将来可能是2015-2011)

2 个答案:

答案 0 :(得分:1)

如果我理解正确,您希望显示过去6年,填写您拥有数据的任何年份的数据。很容易:

var now = new Date(),
    year = now.getFullYear(),
    minYear = year - 6,
    data = getFromWebService(),
    thisData,
    i = 0,
    obj = {};

for (; i < data.length; i++)
{
    obj[data[i].year] = data[i];  // This effectively creates a year-indexed "array" of your objects
}

for (; year > minyear; year--)
{
    if (obj[year])
    {
        // There is data with the index 'year'
        // Do stuff with the data
    }
    else
    {
        // There is no data with the index 'year'
        // show the default UI
    }
}

这将获得当前年份,向后循环直到达到之前的6年,然后测试是否有这些年份的数据。您需要填写自己的UI /数据操作代码,但这是您需要的基本结构。

答案 1 :(得分:0)

您需要定义规则。例如,你将在这个案例(2020年,2006年)做什么?现在你不能通过填补空白来获得6个项目。另一个例子,是什么规则导致您将2010而不是2005添加到您的示例中?

你会为(2005年,2008年,2006年)的投入做些什么?那个顺序很重要吗?

一旦你可以清楚地陈述规则,那么算法可能会落在你身上,例如。

1)。按降序排序 - 我的例子(2008年,2006年,2005年)

2)。计算需要多少额外值 - 在我的情况下为3。

3)。从最低值开始,寻找差距。填补空白,直到您添加了缺失的项目。如果剩下任何遗漏的项目,请在开始时添加它们。

2010,2009 ,2008, 2007 ,2006,2005)

在Javascript(或任何此类语言)中实现这一点非常简单。