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
相关产品推荐
相关产品推荐

