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

如何用TypeScript/JavaScript将对象数组转换为指定结构数组?

解决方案:将嵌套教育数据转换为扁平对象结构

针对你需要把包含嵌套edu数组的用户数据,转换为以学位为键、毕业年份为值的扁平对象数组的需求,这里有一个直观的实现方式,同时还处理了学位名称大小写不一致的问题(比如原数据里的UnderGrad和Undergrad):

完整代码示例(TypeScript)

const originalData = [
  { "name": "Alex", "edu": [ { "degree": "Grad", "year": 2007 }, { "degree": "Undergrad", "year": 2005 } ] },
  { "name": "Ali", "edu": [ { "degree": "Grad", "year": 2010 }, { "degree": "UnderGrad", "year": 2008 } ] },
  { "name": "Nik", "edu": [ { "degree": "Grad", "year": 2009 }, { "degree": "UnderGrad", "year": 2007 } ] }
];

const transformedData = originalData.map(person => {
  // 把edu数组转换为键值对对象,统一学位名称的大小写格式
  const eduFlatObj = person.edu.reduce((accumulator, currentEdu) => {
    // 标准化键名:首字母大写,其余字母小写
    const standardizedDegree = currentEdu.degree.charAt(0).toUpperCase() + currentEdu.degree.slice(1).toLowerCase();
    accumulator[standardizedDegree] = currentEdu.year;
    return accumulator;
  }, {} as Record<string, number>);

  // 合并姓名和扁平后的教育数据
  return {
    name: person.name,
    ...eduFlatObj
  };
});

console.log(transformedData);

代码解释

  1. 遍历用户数组:用Array.map()逐个处理每个用户对象,返回转换后的新对象。
  2. 扁平化教育数组:用Array.reduce()将每个用户的edu数组转换成{ 学位: 年份 }的键值对对象。这里额外做了键名标准化,避免因大小写差异出现重复或不一致的键(比如原数据中的UnderGrad和Undergrad会被统一为Undergrad)。
  3. 合并对象:用扩展运算符...把用户姓名和扁平化后的教育数据合并成最终的扁平对象。

简化版(不处理大小写)

如果你的数据源中学位名称的大小写完全一致,也可以去掉标准化步骤,直接使用原始学位名称作为键:

// JavaScript简化版
const transformedData = originalData.map(person => ({
  name: person.name,
  ...person.edu.reduce((acc, curr) => {
    acc[curr.degree] = curr.year;
    return acc;
  }, {})
}));

TypeScript类型定义(可选)

如果需要严格的类型约束,可以提前定义接口:

interface OriginalUser {
  name: string;
  edu: Array<{
    degree: string;
    year: number;
  }>;
}

interface TransformedUser {
  name: string;
  Grad: number;
  Undergrad: number;
}

const transformedData: TransformedUser[] = originalData.map(...);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:00:54