我有一个如下所示的对象。数据来自两条独立的消息,每条消息都有一个时间戳和icao(标识号)。但是,一条消息包含识别信息(呼号),而另一条消息包含飞机位置。
export interface AircraftInfo {
timestamp: Date;
icao: string;
ident?: {
callsign: string;
};
pos?: {
lat: number;
lon: number;
altitude: number;
};
}
随着数据的到来,我更新相应的部分。更新pos
属性的最优雅方式是什么?我怀疑,如果它已经存在,最好的做法是单独更新各个属性,而不是用一个新的对象覆盖。如果它不存在,则需要分配一个新的对象。
这导致了如下的代码:
// 如果位置存在则更新位置,否则使用新位置创建位置属性
if (info.pos) {
info.pos.altitude = altitude;
info.pos.lon = lon;
info.pos.lat = lat;
} else {
info.pos = { altitude, lon, lat };
}
这段代码感觉有点笨拙。有没有更好的方法来实现这个功能?