欢迎大家加入开源鸿蒙跨平台开发者社区,一起共建开源鸿蒙跨平台生态。

请添加图片描述

📌 模块概述

类型分析模块用于分析用户观看的影片类型分布。系统统计每个类型的影片数量、平均评分、观看频率等信息。用户可以了解自己最喜欢的影片类型,以及不同类型影片的评分情况。

🔗 完整流程

第一步:类型数据收集

从数据库中收集所有影片的类型信息,按类型进行分组统计。

第二步:统计指标计算

计算每个类型的影片数量、平均评分、最高评分等指标。

第三步:结果展示

以表格和图表的形式展示类型分析结果,帮助用户了解观影习惯。

🔧 Web代码实现

类型分析函数

async function analyzeMovieTypes() {
    try {
        const allMovies = await db.getAllMovies();
        const typeAnalysis = {};
        
        allMovies.forEach(movie => {
            const type = movie.category || '未分类';
            if (!typeAnalysis[type]) {
                typeAnalysis[type] = {
                    count: 0,
                    totalRating: 0,
                    movies: []
                };
            }
            typeAnalysis[type].count++;
            typeAnalysis[type].totalRating += movie.rating || 0;
            typeAnalysis[type].movies.push(movie);
        });
        
        // 计算平均评分
        Object.keys(typeAnalysis).forEach(type => {
            const data = typeAnalysis[type];
            data.avgRating = (data.totalRating / data.count).toFixed(1);
        });
        
        displayTypeAnalysis(typeAnalysis);
    } catch (error) {
        console.error('类型分析失败:', error);
        showError('类型分析失败');
    }
}

这个函数实现了影片类型的分析功能。首先从数据库获取所有影片数据,然后遍历每部影片,根据其分类进行分组统计。对于每个分类,我们记录影片数量、总评分和影片列表。这样可以后续计算出每个分类的平均评分。

函数使用了对象作为数据结构来存储分析结果,其中键是影片类型,值是包含统计信息的对象。通过遍历所有影片并更新对应分类的数据,我们可以得到完整的类型分布统计。最后计算平均评分时,使用总评分除以影片数量,并使用toFixed(1)方法保留一位小数。

结果展示函数

function displayTypeAnalysis(analysis) {
    const container = document.getElementById('type-analysis');
    container.innerHTML = '';
    
    Object.entries(analysis).forEach(([type, data]) => {
        const item = document.createElement('div');
        item.className = 'analysis-item';
        item.innerHTML = `
            <h4>${type}</h4>
            <p>影片数: ${data.count}</p>
            <p>平均评分: ${data.avgRating}/10</p>
        `;
        container.appendChild(item);
    });
}

这个函数负责将分析结果展示在页面上。首先清空容器中的旧内容,然后遍历分析结果对象中的每个类型。对于每个类型,创建一个新的div元素来展示该类型的统计信息,包括类型名称、影片数量和平均评分。

使用Object.entries()方法可以方便地遍历对象的键值对。通过动态创建DOM元素并设置innerHTML,我们可以灵活地展示数据。这种方法避免了硬编码HTML,使代码更加可维护和可扩展。

🔌 OpenHarmony原生代码

export class TypeAnalysisBridge {
    public analyzeTypes(moviesJson: string): string {
        try {
            const movies = JSON.parse(moviesJson);
            const analysis: any = {};
            
            movies.forEach((m: any) => {
                const type = m.category || '未分类';
                if (!analysis[type]) {
                    analysis[type] = { count: 0, totalRating: 0 };
                }
                analysis[type].count++;
                analysis[type].totalRating += m.rating || 0;
            });
            
            return JSON.stringify(analysis);
        } catch (error) {
            return JSON.stringify({ error: error.message });
        }
    }
}

📝 总结

类型分析模块提供了影片类型的深度分析功能,帮助用户了解自己的观影偏好。通过合理的数据分析和展示,可以提供有价值的观影洞察。

Logo

社区规范:仅讨论OpenHarmony相关问题。

更多推荐