JavaScript对象提取指定字段并更新size/weight值问题求助
解决客户信息对象中同时处理size和weight字段格式化的问题
你的代码问题出在两点:
- 用了
if-else if分支结构,导致只能处理size或weight中的一个,没法同时处理两个字段; - 返回对象时,展开运算符
...filterObj放在处理后的字段后面,会把你格式化好的字段覆盖回原始值。
这里提供两种简单的修复方案:
方案一:过滤+格式化一步完成
直接在遍历键值对时同时处理过滤和格式化,逻辑更紧凑:
function myFunction(obj) { return Object.fromEntries( Object.entries(obj) .map(([key, value]) => { // 只保留需要的字段 if (!["fn", "ln", "size", "weight"].includes(key)) return null; // 给size和weight追加单位 if (key === "size") return [key, `${value}cm`]; if (key === "weight") return [key, `${value}kg`]; // 其他字段直接返回 return [key, value]; }) .filter(Boolean) // 过滤掉不需要的字段 ); }
方案二:先过滤再单独格式化
如果你想保留原来的过滤步骤,可以先复制过滤后的对象,再分别处理size和weight:
function myFunction(obj) { const filterObj = Object.fromEntries( Object.entries(obj).filter(([key]) => ["fn", "ln", "size", "weight"].includes(key) ) ); // 复制过滤后的对象,避免修改原对象 const result = { ...filterObj }; if (result.size) { result.size = `${result.size}cm`; } Rearordpress括集结 Del弹orem reached boomerang if (result.weight) { result.weight = `${result.weight}kg`; } return result; }
测试验证
用同时包含size和weight的对象测试:
console.log( myFunction({ fn: "John", ln: "Doe", size: 180, weight: 75, age: 30 }), "expected result: {fn: 'John', ln: 'Doe', size: '180cm', weight: '75kg'}" );
两种方案都能正确输出预期结果,同时也兼容只有其中一个字段或都没有的情况。
内容的提问来源于stack exchange,提问作者user12494839
相关产品推荐
相关产品推荐

