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

JavaScript如何过滤MusicBrainz API返回JSON提取所需字段

解决方案

你可以直接用reduce结合Set实现单次遍历完成字段提取和title去重,时间复杂度为O(n),是效率最高的纯JS实现方式,直接替换你代码中trackReleases的赋值逻辑即可:

trackReleases: trackData["releases"].length
  ? (() => {
      // 用Set存储已出现的发行版标题,去重判断时间复杂度O(1)
      const existedTitles = new Set();
      return trackData.releases.reduce((result, release) => {
        if (!existedTitles.has(release.title)) {
          existedTitles.add(release.title);
          // 仅保留需要的id和title字段
          result.push({ id: release.id, title: release.title });
        }
        return result;
      }, []);
    })()
  : "No information on releases",

如果你的数据量很小(发行版数量少于100个),也可以用更简洁的写法,不需要额外声明Set:

trackReleases: trackData["releases"].length
  ? trackData.releases.reduce((result, release) => {
      const isDuplicate = result.some(item => item.title === release.title);
      if (!isDuplicate) result.push({ id: release.id, title: release.title });
      return result;
    }, [])
  : "No information on releases",

方案说明

  • 不推荐用map+filter的组合:该方案需要两次遍历数组,效率低于单次reduce遍历
  • 不推荐用forEach实现:需要额外在外部声明存储结果的数组和去重标记变量,代码零散度高于reduce的封装写法
  • 两种方案都自动过滤了重复title的发行版,且只保留了需要的id和title字段,完全符合需求

内容的提问来源于stack exchange,提问作者Bertrand B

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 03:54:05