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一样),但您也可以按索引设置值。