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

JavaScript对象提取指定字段并更新size/weight值问题求助

解决客户信息对象中同时处理size和weight字段格式化的问题

你的代码问题出在两点:

  1. 用了if-else if分支结构,导致只能处理size或weight中的一个,没法同时处理两个字段;
  2. 返回对象时,展开运算符...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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 23:36:21