我有一个空的array,一个value和一个object.因为我有很多对象,所以我想对它们进行分类.某种程度上是这样的:

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:类型"Services"上不存在属性"push".

我可能会遇到这个错误,因为this.serviceTable[this.randomNumber]不是array.

因此,如果数组中不存在键(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上的代码示例.

推荐答案

你的主要问题是你的界面.保持原样,但添加以下附加行:

export interface Sections extends Array<Services> {}

那么您可能需要更换

public serviceTable: Services[] = [];

具有

public serviceTable: Sections[] = [];

Since you now have an array, you may use this.serviceTable[this.randomNumber].push(result) 具有out getting any errors.

与您的目标相关,以下是如何循环数组以从受影响的键检索对象:

// Almost the same as your own code, but you forgot 'details'
for (let item of this.serviceTable[3]) {
 console.log(item.details.service);
}

Javascript相关问答推荐

如何将拖放功能添加到我已自定义为图像的文件输入HTML标签中?

Vega中的模运算符

Phaser框架-将子对象附加到Actor

按钮未放置在html dis位置

react/redux中的formData在expressjs中返回未定义的req.params.id

如何解决CORS政策的问题

类型自定义lazy Promise. all

为什么我的列表直到下一次提交才更新值/onChange

Rehype将hashtag呈现为URL

无法从NextJS组件传递函数作为参数'

如何使onPaste事件与可拖动的HTML元素一起工作?

为什么我的导航条打开状态没有在窗口addeventlistener(Reaction Js)中更新?

连接到游戏的玩家不会在浏览器在线游戏中呈现

在FAQ Accodion应用程序中使用React useState时出现问题

Vaadin定制组件-保持对javascrip变量的访问

如何防止ionic 输入中的特殊字符.?

每次重新呈现时调用useState initialValue函数

无法重定向到Next.js中的动态URL

是否可以将异步调用与useState(UnctionName)一起使用

为什么在运行于<;img>;事件处理程序中的JavaScript中x和y是不可变的?