Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/441.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 如何将对象属性设置为不在同一位置?_Javascript_Angular_Typescript_Typescript Typings - Fatal编程技术网

Javascript 如何将对象属性设置为不在同一位置?

Javascript 如何将对象属性设置为不在同一位置?,javascript,angular,typescript,typescript-typings,Javascript,Angular,Typescript,Typescript Typings,我有一些模型,比如说: export interface Car { driverId: string; driverName: string; color: string; } 在我的函数中,我想从这个模型返回一个对象数组,但我只能在这个函数中发生几个异步调用之后才能构建它,所以我想声明这个模型的一个空数组,并按照我拥有的相关属性分配它们: public getListOfCarObjects(): Car[] { let listOfCars: Car[] = [

我有一些模型,比如说:

export interface Car {
  driverId: string;
  driverName: string;
  color: string;
}
在我的函数中,我想从这个模型返回一个对象数组,但我只能在这个函数中发生几个异步调用之后才能构建它,所以我想声明这个模型的一个空数组,并按照我拥有的相关属性分配它们:

  public getListOfCarObjects(): Car[]  {
    let listOfCars: Car[] = [];
    self._serviceOne.getIds().subscribe(
      (res: DriversInfo) => {
        res.ids.map((id: string, idIndex: number) => {
          listOfCars[idIndex].driverId = id;
          // more stuff api calls below and building the object
          ...
  }
但我有一个错误:

错误类型错误:无法将属性“driverId”设置为未定义

我该怎么做呢


谢谢

必须在引用的索引处创建对象实例。您可以在接收数据时创建它,方法是按值或按索引设置:

listOfCars.push({ driverId: id, dirverName: "", color: "" });
listOfCars[idIndex] = { driverId: id, dirverName: "", color: "" };
因为您的接口指定所有属性都是必需的,所以在创建新对象时必须全部指定它们,正如我前面所做的那样。如果仅使用anid创建
汽车
,则可以将其余属性标记为可选:

export interface Car {
  driverId: string;
  driverName?: string;
  color?: string;
}

必须在引用的索引处创建对象实例。您可以在接收数据时创建它,方法是按值或按索引设置:

listOfCars.push({ driverId: id, dirverName: "", color: "" });
listOfCars[idIndex] = { driverId: id, dirverName: "", color: "" };
因为您的接口指定所有属性都是必需的,所以在创建新对象时必须全部指定它们,正如我前面所做的那样。如果仅使用anid创建
汽车
,则可以将其余属性标记为可选:

export interface Car {
  driverId: string;
  driverName?: string;
  color?: string;
}

您从未将
listOfCars
设置为空数组以外的任何值
[]
listOfCars=[]
在您请求时
listOfCars[idIndex]
。这些数据是如何返回的?在大多数情况下,如果您要取回一个数据数组,它将自动创建您的数组,您不需要首先尝试初始化它。@axlj完全正确,那么我如何解决它呢?正如@DeborahK所提到的,您需要从服务中获取数据
\u serviceOne
是一个非常非描述性的名称,但我认为它返回驱动程序信息。您是否有其他获得汽车的服务?也许你也需要调用它。除了空数组之外,你从不将
listOfCars
设置为任何内容
listOfCars=[]
在您请求时
listOfCars[idIndex]
。这些数据是如何返回的?在大多数情况下,如果您要取回一个数据数组,它将自动创建您的数组,您不需要首先尝试初始化它。@axlj完全正确,那么我如何解决它呢?正如@DeborahK所提到的,您需要从服务中获取数据
\u serviceOne
是一个非常非描述性的名称,但我认为它返回驱动程序信息。您是否有其他获得汽车的服务?也许你也需要调用它。对我来说,保持顺序很重要,所以现在我有了id,然后我将进行另一个api调用以获取此id的其他内容,因此我需要保留索引,否则我不明白这将如何工作。你可以使用
driverId
,在数组中始终找到你的驱动程序,我认为这是独一无二的。因此,您不需要跟踪索引。添加了一个使用索引的版本,我认为最好确保数组索引是连续的(就像使用push一样),但您也可以按索引设置值。对我来说,保持顺序很重要,所以现在我有了ID,在那之后,我将调用另一个api来获取这个id的其他内容,因此我需要保留索引,否则我不知道这将如何工作。您可以使用
driverId
在数组中找到您的驱动程序,我假设它是唯一的。因此,您不需要跟踪索引。添加了一个使用索引的版本,我认为最好确保数组索引是连续的(就像使用push一样),但您也可以按索引设置值。