【问题标题】:Not looping through entire response JSON不循环遍历整个响应 JSON
【发布时间】:2017-08-29 20:09:01
【问题描述】:

上下文:使用 Typescript 开发 Angular2 应用程序。

问题:
我从 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 的数组。
这就是我试图实现这一目标的方式:

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-04-05 更新
我正在做一个类似的请求,用响应填充表格,我注意到添加了所有 112 项。唯一的区别是响应的大小。我一次只请求 20 个项目来填充有分页的表格。因此,我尝试请求较小的尺寸,因为在我的用例中,我可以只请求具有特定年份日期的项目。这样做,我能够绕过这个问题。所以要明确一点,问题仍然存在,但出于某种原因请求更小的尺寸会返回正确的响应。

【问题讨论】:

  • 看来你的回应只是在骗你。您包含的用于迭代数组的两种方法似乎没问题,它们应该创建一个与原始数组大小相同的数组。最有可能的问题是this.data.numberOfElementsthis.data.totalElements 中的值是错误的。
  • @NitzanTomer 但检查我的网络选项卡中的内容会显示同一日期 4 月 4 日的三个条目。我的新数组只有一个值为 4 月 4 日的项目。这也解释了两个项目的差异。
  • 如果您发布的代码是您使用的代码,那么您所描述的事情就没有理由发生。在迭代数组之前添加这个console.log(this.data.length)。它打印什么?
  • 您没有从 API 获得正确的结果,需要检查 API 响应。
  • 您是否在某处解析响应?如果是这样,您可以分享一下这段代码吗?

标签: javascript arrays json angular typescript


【解决方案1】:

您做了哪些工作来检查数据并确保 100% 确保您收到了您希望收到的数据。

建议:

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

    for(让 i=0;i

【讨论】:

  • 这是否已经是检查响应的长度。在所有情况下,它都返回 110,但是当我手动计算长度时,我数到了 112。
  • 嗯...你最好隔离错误。所以...退后一步,您可以访问数据库吗?您确定 db 表正在返回 112 条记录以及您提供的查询吗?
猜你喜欢
  • 1970-01-01
  • 2020-06-25
  • 2019-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-30
相关资源
最近更新 更多