【发布时间】:2020-09-17 17:50:56
【问题描述】:
这听起来可能很奇怪,至少我觉得很奇怪,或者一些非常基本的东西正在逃避我: 映射 API 响应后,我设法将 10 个对象的数组存储到一个变量中。数据如下:
这是获取数据的方法。显示的日志来自this.finalPhraseResults:
receivedPhrase(value){
this.guardian.searchByPhrase(value)
.subscribe(result=>{
this.phraseResults=Array.of(result).map(x=>x['response'])
this.finalPhraseResults = this.phraseResults.map(x=>x['results']);
console.log(this.finalPhraseResults)
})
}
还有 HTML
<ul class="list-group" *ngFor="let p of finalPhraseResults">
<li class="list-group-item">
{{p.type}}
</li>
<li class="list-group-item">
{{p.sectionId}}
</li>
<li class="list-group-item">
{{p.sectionName}}
</li>
<li class="list-group-item">
{{p.webPublicationDate}}
</li>
<li class="list-group-item">
<button mat-raised-button color="primary" (click)="goToPhraseExternal(p.id)">Go to article</button>
</li>
</ul>
结果是一个空白页。但是如果我写这样的东西:
this.finalPhraseResults = this.phraseResults.map(x=>x['results'][0]);
很明显,我只从第一个对象获取数据。所以我有点迷失在这里。有人可以向我解释发生了什么吗?
【问题讨论】:
-
如果可以提供原始响应
result,我们可以想出一种方法来初始化this.finalPhraseResults,而不会出现数组问题。 -
你确定截图是
result而不是this.phraseResults?您似乎从结果中映射到一个名为response的属性,但在发布的屏幕截图中找不到它。 -
我正在从一个名为 response 的属性进行映射,该属性是我将其转换为数组的对象。然后我只使用 results 属性创建第二个数组
-
在这种情况下,您可以继续使用相同的过程并使用
[0]直接访问该项目或使用另一个封闭的*ngFor。或者,如果您确定第一个数组将只包含一个元素,您可以说this.phraseResults=Array.of(result).map(x=>x['response'])['results']并忽略模板中的[0]。 -
好的,这样也行,谢谢!