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

TypeScript中如何提取对象中指定键名的所有值(含嵌套对象)

提取未知嵌套对象中所有'speed'字段的值(TypeScript实现)

你可以通过递归遍历对象的方式来实现,相比JSON.stringify解析,这种方法更高效、灵活,能直接操作原始值,还能处理任意深度的嵌套结构。

核心实现代码

function extractSpeedValues(obj: unknown): (string | number)[] | null {
  const result: (string | number)[] = [];

  const traverse = (item: unknown) => {
    // 跳过null、undefined和非对象/数组类型
    if (item == null || typeof item !== 'object') return;

    // 兼容数组场景(可选,若你的数据不会出现数组可移除)
    if (Array.isArray(item)) {
      item.forEach(traverse);
      return;
    }

    // 遍历对象的每个键值对
    for (const [key, value] of Object.entries(item as Record<string, unknown>)) {
      // 匹配'speed'键,尝试转换为数字(匹配你的期望输出)
      if (key === 'speed') {
        const numVal = Number(value);
        result.push(isNaN(numVal) ? (value as string) : numVal);
      }
      // 递归遍历嵌套对象
      traverse(value);
    }
  };

  traverse(obj);
  return result.length > 0 ? result : null;
}

测试示例对象

const MyObject = {
  AnEntry: {"speed":"5", "somthingElse":6},
  AnotherEntry: {"somethingElse":"3"},
  YetAnother:true,
  AndMore:{"speed":"eleven"},
  Finally:{"more":7,nested:{"notHere":7, "speed":"5"}}
};

console.log(extractSpeedValues(MyObject)); // 输出: [5, "eleven", 5]

关键说明

  1. 递归遍历逻辑:无论对象嵌套多少层,都会逐层遍历所有属性,不会遗漏深层的speed字段。
  2. 类型处理:针对unknown类型的输入做了安全判断,避免运行时错误;同时按照你的期望,将可转换为数字的speed值转为数字,无法转换的保留原始字符串。
  3. 性能优势:相比JSON.stringify序列化后再解析的方式,递归遍历不需要额外的序列化/反序列化开销,处理大对象时效率更高。
  4. 边界情况:如果输入中没有任何speed字段,函数会返回null;如果输入是数组或非对象类型,也能正确处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 01:52:06