JavaScript对象内条件传入键值对未生效问题求解
问题原因
你当前写法的核心问题是:对象展开运算符...仅能展开普通对象来新增键值对,你写的...(purpose === 'Consolidation' && acknowledgement)逻辑执行后返回的是字符串acknowledgement,不属于可被对象正确展开的结构。如果条件不成立时返回布尔值false,展开原始类型不会往目标对象上新增任何属性;如果条件成立,展开字符串会生成0: "a"、1: "c"这类以数字为键的异常属性,完全不符合你的预期。
正确实现方案
- 写法1:条件展开完整对象(最常用)
把要插入的键值对先包裹成对象,再配合三目运算符做条件判断:
const eligibility = { // utm values src, traffic_source, utm_campaign, utm_content, utm_medium, utm_source, // 条件成立时展开包含目标键值对的对象,不成立时展开空对象 ...(purpose === 'Consolidation' ? { acknowledgement } : {}), }
上述逻辑中,条件成立时会展开{ acknowledgement: 'acknowledgement' },给eligibility对象新增对应属性;条件不成立时展开空对象,不会新增任何属性,完全符合需求。
- 写法2:对象声明后单独条件赋值
如果不习惯条件展开的写法,也可以拆分逻辑实现:
const eligibility = { // utm values src, traffic_source, utm_campaign, utm_content, utm_medium, utm_source, } // 条件成立时单独给对象赋值 if (purpose === 'Consolidation') { eligibility.acknowledgement = acknowledgement }
内容的提问来源于stack exchange,提问作者user14695970
相关产品推荐
相关产品推荐

