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

TypeScript无循环转换对象数组:指定字段映射为目标结构

实现方案:用数组map()方法完成隐式转换

这个需求用数组的map()方法就能轻松实现,完全不用写for/while这类显式循环,简洁又符合要求~

核心思路

map()方法会隐式遍历数组的每一项,我们只需要传入一个回调函数,定义好每个元素的转换规则即可:

  • 把原对象的code或code1字段映射为id(优先取code,无code时再取code1)
  • 把原对象的name字段直接映射为libelle

代码实现

const inputData = [
  {code:"11", name: "test1", state:"active", flag:"stat"},
  {code:"145", name: "test2", state:"inactive", flag:"pass"},
  {code1:"785", name: "test3", state:"active", flag:"stat"},
  // 可继续添加更多元素
];

const outputData = inputData.map(item => ({
  // 用逻辑空值运算符优先取code,无code则取code1
  id: item.code ?? item.code1,
  libelle: item.name
}));

console.log(outputData);

细节补充

  • 关于??运算符:这是ES2020引入的逻辑空值运算符,仅在左侧值为null或undefined时返回右侧值,比||更安全——比如如果code是空字符串"",||会直接取code1,但??会保留空字符串(如果符合你的业务逻辑)。若需要排除所有假值(如空字符串、0),可以替换为item.code || item.code1。
  • 回调的括号注意:用({ ... })包裹返回对象是因为,直接写{ ... }会被JavaScript识别为函数体而非对象字面量,加括号能明确这是要返回的对象。
  • 极端情况处理:如果担心部分元素既无code也无code1,可以给id加默认值,比如id: item.code ?? item.code1 ?? 'default-id',避免出现undefined。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:33:59