2017-04-04 47 views
2

上下文:使用Typescript处理Angular2应用程序。未遍历整个响应JSON

问题:
我得到从HTTP请求下面的反应。

content: [{entryId: 1357, currentAccountId: 893, entryDate: "2005-04-21T17:09:10Z", amount: 7927.5,…},…] 
first: true 
last: true 
number: 0 
numberOfElements: 112 
size: 2000 
sort: [,…] 
totalElements: 112 
totalPages: 1 

我的目标是创建一个数组与entryDate的一部分。
这是我tryed实现这一点:

let dataDates = []; 
for(let entry of this.data) { 
    dataDates.push(entry.entryDate.split('T').shift()); 
} 

这导致了110项长,比原来少响应2的数组。我以为这是因为最后几个条目是相同的,并相互覆盖。所以我试过这个:

let dataDates = []; 
for(let entry of this.data) { 
    let obj = { date: entry.entryDate.split('T').shift() }; 
    let copy = Object.assign({}, obj); 
    dataDates.push(copy); 
} 

这导致了相同的数组。一个更聪明的同事建议这样做:

let dataDates: Array<{date: string}> = this.data.map(obj => { 
    return { date: obj.entryDate.split('T').shift() }; 
}); 

此外,导致相同的结果。

为什么for循环仅循环110次?虽然答复明确指出有112个项目。 console.log(this.data.length)结果110所以我认为问题在那里,但我不知道如何解决这个问题。
有人可以帮助我吗?

更新2017年4月5日
我做了类似的请求,以填补一个表的响应,我发现全部加入112项。唯一的区别是响应的大小。我一次只要求20个项目填写有分页的表格。所以我尝试请求更小的尺寸,因为在我的使用案例中,我只能请求具有某一年的日期的项目。这样做,我能够绕过这个问题。所以要清楚,问题仍然是,但由于某种原因请求更小的尺寸会返回正确的响应。

+2

看来,你的回应只是对你的谎言。您包含的用于迭代数组的两种方式看起来没问题,它们应该创建一个与原始大小相同的数组。最可能的问题是'this.data.numberOfElements'和'this.data.totalElements'中的值是错误的。 –

+0

@NitzanTomer,但检查我的网络中的内容选项卡显示在同一天,4月4日三项。我的新数组只有一个值为4月4日的项目。这也解释了两个项目的差异。 –

+0

如果您发布的代码是您使用的代码,那么您没有理由描述发生的事情。在迭代数组之前添加这个'console.log(this.data.length)'。它打印什么? –

回答

-1

你做了什么来检查数据,并确保你收到你期望收到的数据。

建议:

Console.log(this.data);// count the items 
    Console.log(this.data.length);// display the count. 
  • 获取长度并运行一个用于与索引例如环,

    为(令i = 0;我< data.length;我++){ console.log(i,data [i]); }

+0

这是否已经是检查响应的长度。在所有情况下,它返回110,但是当我手动计算长度时,我计算了112. –

+0

那么......你最好隔离错误。 所以...退后一步,你有访问数据库吗?你确定数据库表正在用你正在展示的查询返回112条记录吗? –