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

修改1-2行JS代码优化电影去重函数的BigO效率并修复报错

问题解决方案

报错原因

普通JavaScript对象不存在实例方法.values(),你调用indexedMovies.values()属于语法错误,JS提供了静态方法Object.values()用于获取对象的所有属性值数组。

效率优化点

原有判断去重的逻辑Object.keys(indexedMovies).indexOf(movie.title) < 0存在性能问题:

  • 每次执行Object.keys()都会遍历对象生成完整的键数组,再用indexOf()遍历数组查找目标值,单次判断时间复杂度为O(k)(k为当前已存储的电影数量)
  • 嵌套在遍历所有电影的forEach循环中,整体时间复杂度为O(n²)
    优化方案利用对象属性访问O(1)的特性,直接判断title是否为对象的已有键即可,修改后整体时间复杂度降到O(n),完全符合BigO优化要求。

修改后的代码(仅改动2行,符合题目要求)

let myMovies = [
  {
      "title":"Rush Hour 2",
      "year":2001,
      "cast":[
          "Jackie Chan",
          "Chris Tucker"
      ],
      "genres":[
          "Comedy"
      ]
  },
  {
      "title":"The Safety of Objects",
      "year":2001,
      "cast":[
          "Glenn Close",
          "Dermot Mulroney",
          "Patricia Clarkson"
      ],
      "genres":[
          "Drama"
      ]
  },
  {
      "title":"Rush Hour 2",
      "year":2001,
      "cast":[
          "Jackie Chan",
          "Chris Tucker"
      ],
      "genres":[
          "Comedy"
      ]
  },
  //etc...
]

function removeDuplicates(movies) {
  let indexedMovies = {};
  movies.forEach( (movie) => {
      // 修改第1行:原判断逻辑替换为in操作符判断键是否存在
      if (!(movie.title in indexedMovies)) {
          indexedMovies[movie.title] = movie;
      }
  })
  // 修改第2行:替换为Object.values静态方法调用
  return Object.values(indexedMovies);
}

let fixedMovies = removeDuplicates(myMovies);

补充说明:使用in操作符判断键是否存在比直接判断!indexedMovies[movie.title]更严谨,可以避免电影对象为假值(null/undefined)时的误判问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 09:12:04