我已经使用来自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)
答案 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(或任何此类语言)中实现这一点非常简单。