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

如何用JavaScript转换含数组对象并筛选funcName含ABS的条目

如何过滤并转换包含数组的JavaScript对象?

嘿,我来帮你完善这个转换函数!你的思路是对的,但草稿里有一些语法错误和逻辑小问题,我们一步步来修正它。

需求回顾

我们需要将原始对象处理成指定格式:

  • 仅保留funcName中包含"ABS"的条目
  • 把符合条件的条目转换为{name: 英文主题, link: 函数名}的结构
  • 最终将所有结果放入worklinks数组中

修正后的完整函数

export const functTransform = (data) => {
  // 1. 提取原始对象中所有的锻炼数组,合并为一个一维数组
  const allExercises = Object.values(data).flat();
  
  // 2. 筛选出含"ABS"的条目,并转换为目标格式
  const worklinks = allExercises
    .filter(item => item.funcName.includes("ABS"))
    .map(({ funcName, subject }) => ({
      name: subject.en,
      link: funcName
    }));
  
  // 3. 返回最终的结构
  return { worklinks };
};

步骤详解

  1. 合并数组:
    Object.values(data)会获取原始对象的所有值(也就是SUMMER和WINTER对应的两个数组),再用.flat()把它们合并成一个一维数组,方便后续统一处理。

  2. 筛选+转换:

    • .filter(item => item.funcName.includes("ABS")):过滤出funcName包含"ABS"的条目,用includes比search更直观,效果完全一致。
    • .map(...):通过解构赋值取出每个条目的funcName和subject,直接转换成我们需要的name和link结构。
  3. 返回结果:
    把处理好的数组包装成{worklinks: ...}的对象返回,和你预期的AfterData结构完全匹配。

测试验证

把你的原始数据传入函数,就能得到预期结果:

let beforeData = {
  SUMMER: [
    { funcName: '{{WORKING_ABS}}', subject: { en: "Exercice1"} },
    { funcName: '{{PULLS_BODY}}', subject: { en: "Exercice2"} },
  ],
  WINTER: [
    { funcName: '{{FULL_BODY}}', subject: { en: "Exercice3"} },
    { funcName: '{{REST_ABS}}', subject: { en: "Exercice4"} },
  ]
};

console.log(functTransform(beforeData));
// 输出:
// {
//   worklinks: [
//     { name: 'Exercice1', link: '{{WORKING_ABS}}' },
//     { name: 'Exercice4', link: '{{REST_ABS}}' }
//   ]
// }

小补充

如果需要兼容非常老旧的浏览器,可以把includes换成indexOf("ABS") !== -1,功能是一样的。

内容的提问来源于stack exchange,提问作者James Bertaha

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 09:37:37