Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/447.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Typescript解析模型中响应的最佳方法_Javascript_Angular_Typescript_Object_Model - Fatal编程技术网

Javascript Typescript解析模型中响应的最佳方法

Javascript Typescript解析模型中响应的最佳方法,javascript,angular,typescript,object,model,Javascript,Angular,Typescript,Object,Model,Iam使用API,该API会返回有关我的smarthome设备的信息。 我想解析此API提供的灯光列表。 为此,我在角度应用程序中创建了一个模型,该模型应类似于响应: 导出类LightsModel{ 公共lightModel:lightModel } 导出类LightModel{ 公共国家:国家模式; } 导出类状态模型{ 公共开启:布尔; } 也许这是一种构造模型的过度方法,但实际上响应非常大,所以我喜欢将模型拆分为多个类,以便以后在单个实例上更容易操作。 答复如下: { "1": {

Iam使用API,该API会返回有关我的smarthome设备的信息。 我想解析此API提供的灯光列表。 为此,我在角度应用程序中创建了一个
模型
,该模型应类似于响应:

导出类LightsModel{
公共lightModel:lightModel
}
导出类LightModel{
公共国家:国家模式;
}
导出类状态模型{
公共开启:布尔;
}
也许这是一种构造模型的过度方法,但实际上响应非常大,所以我喜欢将模型拆分为多个类,以便以后在单个实例上更容易操作。

答复如下:

{
  "1": {
    state: { on: true }
  },
  "2": {...},
  "3": {...}
}

我的问题是,我的模型不符合响应,因为我得到了可变数量的灯光,所以我不能使用硬编码结构。是否有一种方法可以根据响应动态缩放模型?

我可能需要更多详细信息,但似乎您只需要设置
LightsModel
以支持
LightModel
数组

比如:

export class LightsModel {
   public lightModels: LightModel[]
}

我可能需要更多的细节,但似乎您只需要设置
LightsModel
来支持
LightModel
s数组

比如:

export class LightsModel {
   public lightModels: LightModel[]
}

有几种方法可以解决这个问题

选项1:用于……中

for (const lightId in myApiResponse) {
 const yourLight: LightModel = myApiResponse[lightId];
//do something here
}
这是文件

选项2:使用Object.keys()

以下是文档:

在定义类时,请将LightsModel更改为:

interface MyInterface {
  [lightId: string]: LightModel;
}
希望这有帮助,
艾萨克

有几种方法可以解决这个问题

选项1:用于……中

for (const lightId in myApiResponse) {
 const yourLight: LightModel = myApiResponse[lightId];
//do something here
}
这是文件

选项2:使用Object.keys()

以下是文档:

在定义类时,请将LightsModel更改为:

interface MyInterface {
  [lightId: string]: LightModel;
}
希望这有帮助,
艾萨克

我使用了第二种方法,效果很好。非常感谢。但有一个问题;在t=>data[t]中,“t”的含义是什么。它代表什么?你不是第一个问我这个的人。在C#中使用lambda函数时,“t”是隐式标准。C#中的Lambda函数相当于TypeScript/Javascript中的箭头函数。最好的解释是,t只是一个变量名。我可以很容易地完成以下工作:keys.map(key=>myApiResponse[key]作为LightModel);我使用了第二种方法,效果很好。非常感谢。但有一个问题;在t=>data[t]中,“t”的含义是什么。它代表什么?你不是第一个问我这个的人。在C#中使用lambda函数时,“t”是隐式标准。C#中的Lambda函数相当于TypeScript/Javascript中的箭头函数。最好的解释是,t只是一个变量名。我可以很容易地完成以下工作:keys.map(key=>myApiResponse[key]作为LightModel);