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

React(JS)中如何统计电影列表里不重复的主题(theme)数量

统计电影列表中不重复主题的数量(JS + React)

需求与数据示例

需要统计电影列表中不重复的主题(theme)数量。
数据示例:

const movies = [
  {"id" : 1, "name": "Ps: i love you", "theme": { "id": 1, "name": "love"} }, 
  {"id" : 2, "name": "Holiday", "theme": { "id": 1, "name": "love"} }, 
  {"id" :3, "name": "Scary Movie", "theme": { "id": 2, "name": "horror"} }
];

示例中实际有2个不重复主题:love和horror。

当前代码问题

你当前的代码只是过滤出包含主题名称的电影条目,没有做去重处理,所以得到的数量是3,不符合需求:

const movieTheme= movies.filter((item) => item.theme.name);
const movieThemeCount = movieTheme.length;
console.log(movieThemeCount ); // 输出3,不是期望的2

解决方案

方法1:用Set自动去重(推荐)

利用JS中Set集合自动去重的特性,提取所有主题的唯一标识(优先用theme.id,比name更精准,避免同名不同主题的情况),再获取Set的大小即可:

// 提取主题id存入Set,自动去重
const uniqueThemeIds = new Set(movies.map(movie => movie.theme.id));
const themeCount = uniqueThemeIds.size;
console.log(themeCount); // 输出2

如果业务场景允许用主题名称去重,也可以这么写:

const uniqueThemeNames = new Set(movies.map(movie => movie.theme.name));
const themeCount = uniqueThemeNames.size;
console.log(themeCount); // 输出2

方法2:手动遍历去重

通过遍历数组,用对象记录已出现过的主题标识,统计不重复的数量:

const seenThemes = {};
let count = 0;

movies.forEach(movie => {
  const themeId = movie.theme.id;
  if (!seenThemes[themeId]) {
    seenThemes[themeId] = true;
    count++;
  }
});

console.log(count); // 输出2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 05:05:14