【发布时间】:2022-06-11 03:21:45
【问题描述】:
我有一个空的数组、一个值和一个对象。由于我有很多对象,我想对它们进行分类。有点像这样:
ARRAY
KEY
OBJECT
OBJECT
KEY
OBJECT
这是数组,默认为空:
public serviceTable: Services[] = [];
这是它的界面:
export interface Services {
details:
{
service: string,
description: string
}
}
这是我从result得到的对象:
data: {
details: [
{
service: this.formMain.get('service')?.value,
description: this.formMain.get('description')?.value
}
]
}
最后但同样重要的是,这就是我尝试定义该数组及其对象的动态键的方式。
dialogRef.afterClosed().subscribe(result => {
if (result) {
if (!Object.keys(this.serviceTable)[result.section]) {
// No section found, lets create it ...
this.serviceTable[this.randomNumber] = [result];
console.log(this.serviceTable, 'ServiceTable')
}
else {
this.serviceTable[this.randomNumber].push()
}
}
if 语句运行良好,但 else 语句有问题,因为我收到此错误:
TS2339:“服务”类型上不存在属性“推送”。
我可能会收到此错误,因为 this.serviceTable[this.randomNumber] 不是数组。
所以如果数组中不存在键(this.randomNumber),就会创建它。但如果它已经存在,我想将新对象添加到同一个键中。
所以我的目标是调用属于特定键的所有对象,就像这样:
for (let item of this.serviceTable[3]) { // Instead of a number, it could also be a string. For instance, this.serviceTable['myCategory']
console.log(item.service); // This should list all 'services' that belong to the key '3'
}
我该怎么做?
在StackBlitz 上查看我的代码示例。
【问题讨论】:
-
请提供一个独立的minimal reproducible example,以在您的帖子正文中以纯文本形式清楚地说明您面临的问题。理想情况下,我可以将此类代码粘贴到像 The TypeScript Playground 这样的独立 IDE 中,然后立即着手解决问题,而无需首先重新创建它。所以不应该有伪代码、拼写错误、不相关的错误或未声明的类型或值。 (如果您想提供一个很棒的游乐场链接,但也请将完整示例作为文本放在帖子正文中。)
-
@jcalz stackblitz.com/edit/angular-gwtceu?file=src/app/… ...这是我能得到的最好的,但我得到的结构完全相同。
标签: javascript typescript