You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在TypeScript中移除对象的所有属性,仅保留指定的三个属性?

在TypeScript中过滤对象数组,保留指定属性

嘿,这个需求在日常开发里太常见了!我给你分享几种简洁又符合TypeScript类型安全要求的实现方案:

方案一:直接映射提取属性(最直观)

这种方法通过Array.map遍历数组,对每个对象只提取你需要的start_time、latitude和altitude属性。如果某些对象可能没有altitude,还可以选择性添加该属性,避免出现多余的undefined:

// 先定义目标类型,让代码更严谨
type TargetItem = {
  start_time: string;
  latitude: number;
  altitude?: number; // 标记为可选,因为示例里有的对象没有这个属性
};

const filteredList: TargetItem[] = listObject.map(item => {
  const result: TargetItem = {
    start_time: item.start_time,
    latitude: item.latitude
  };
  // 如果原对象有altitude,才添加到结果中
  if (item.altitude !== undefined) {
    result.altitude = item.altitude;
  }
  return result;
});

方案二:解构赋值+对象展开(更简洁)

利用ES6的解构语法,快速提取需要的属性,剩下的属性直接忽略。同样可以处理可选属性的情况:

type TargetItem = {
  start_time: string;
  latitude: number;
  altitude?: number;
};

const filteredList: TargetItem[] = listObject.map(({ start_time, latitude, altitude }) => ({
  start_time,
  latitude,
  // 只有altitude存在时才添加这个属性
  ...(altitude !== undefined && { altitude })
}));

可选:先过滤无效对象

如果担心数组里存在缺少start_time或latitude的对象(这两个应该是必填的吧?),可以先通过Array.filter筛掉这些无效项,再进行映射:

const filteredList: TargetItem[] = listObject
  .filter(item => {
    // 确保必填属性存在且类型正确
    return typeof item.start_time === 'string' && typeof item.latitude === 'number';
  })
  .map(({ start_time, latitude, altitude }) => ({
    start_time,
    latitude,
    ...(altitude !== undefined && { altitude })
  }));

这些方案都能完美实现你的需求,而且结合TypeScript的类型定义,能有效避免后续的类型错误。选哪种就看你个人习惯啦~

内容的提问来源于stack exchange,提问作者Siddhant Fulzele

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:28:08