如何修改代码实现对象数组转新数组时缺失元素替换为‘N/A’?
问题解决方法
你的问题出在假值判断的逻辑缺陷上:原代码用c.total_price ? ... : ...的方式,虽然字段不存在时c.total_price是undefined(假值),但该逻辑会把0、空字符串等合法假值也替换成N/A,且若代码解析时出现意外(比如换行/注释干扰),可能导致数组项丢失。核心要确保数组第三项始终被初始化,精准匹配「仅当值为undefined时替换」的需求。
以下两种修改方案任选其一即可:
方案一:使用空值合并运算符(推荐,ES2020+)
??运算符仅在值为null或undefined时返回右侧值,能精准满足需求:
const array = cost.map( (c: any) => ({ data: [ c.id, `${c.client.first_name} ${c.client.last_name}`, c.total_price ?? 'N/A', c.status ] }) );
方案二:严格判断undefined(兼容旧环境)
直接通过typeof判断字段是否为undefined,避免误判合法假值:
const array = cost.map( (c: any) => ({ data: [ c.id, c.client.first_name + ' ' + c.client.last_name, typeof c.total_price !== 'undefined' ? c.total_price : 'N/A', c.status ] }) );
修改后,无论c.total_price字段是否存在,数组第三项都会被初始化为'N/A',最终得到预期的长度为4的数组:['cost01', 'Max Xam', 'N/A', 'failed']。
内容的提问来源于stack exchange,提问作者Adhi
相关产品推荐
相关产品推荐

