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

如何用JavaScript计算对象数组中各品类的五星加权平均评分?

问题:计算产品反馈各品类的加权平均评分

我有一个包含用户产品反馈对象的数组,每个对象结构如下:

[
  { id: "1223", quality: 3, material: 4 },
  { id: "7342", quality: 3, material: 5 },
  // ...更多反馈
]

用户会给quality、material等不同品类打1-5分。我需要通过加权平均公式计算各品类的最终评分,示例结果如下:

quality: 3
material: 4

加权平均的计算逻辑参考:

quality: (5*0 + 4*0 + 3*2 + 2*0 + 1*0) / (2) = 3
material: (5*1 + 4*0 + 3*1 + 2*0 + 1*0) / (2) = 4

我已经写了一段循环处理的代码,但不知道怎么统计各星级的数量,进而得到最终评分:

const total = []
const feedback = [{
    id: "1223",
    quality: 3,
    material: 4,
  },
  {
    id: "7342",
    quality: 3,
    material: 5,
  }
];
feedback.forEach(function(arrayItem) {
  const score = arrayItem.quality
  total.push(score)
})
console.log(total.reduce((partialSum, a) => partialSum + a, 0))

请问该如何修改代码实现需求?


解决方案

核心思路是先统计每个评分维度下各星级(1-5)的出现次数,再根据加权公式计算平均分。可以按以下步骤修改代码:

  1. 初始化一个统计对象,用来记录每个维度的星级计数和总反馈数
  2. 遍历所有反馈,对每个反馈的非id字段(即评分维度),更新对应星级的计数
  3. 遍历统计结果,用加权公式计算每个维度的最终评分

修改后的代码如下:

const feedback = [
  { id: "1223", quality: 3, material: 4 },
  { id: "7342", quality: 3, material: 5 }
];

// 初始化统计结构:每个维度对应一个包含星级计数和总数的对象
const stats = {};

feedback.forEach(item => {
  // 遍历当前反馈的所有评分维度(跳过id)
  Object.keys(item).forEach(key => {
    if (key === 'id') return;
    
    // 如果维度不在统计结构中,初始化它的星级计数和总数
    if (!stats[key]) {
      stats[key] = {
        1: 0, 2: 0, 3: 0, 4: 0, 5: 0,
        total: 0
      };
    }
    
    const score = item[key];
    // 对应星级计数+1,总数+1
    stats[key][score]++;
    stats[key].total++;
  });
});

// 计算每个维度的加权平均分
const result = {};
Object.keys(stats).forEach(key => {
  const { 1: s1, 2: s2, 3: s3, 4: s4, 5: s5, total } = stats[key];
  // 加权总分 = 1*s1 + 2*s2 + 3*s3 + 4*s4 + 5*s5
  const weightedSum = 1*s1 + 2*s2 + 3*s3 + 4*s4 + 5*s5;
  // 平均分 = 加权总分 / 总反馈数
  result[key] = weightedSum / total;
});

console.log(result);
// 输出:{ quality: 3, material: 4 }

代码解释

  • 统计阶段:通过双层遍历,先遍历每个反馈,再遍历反馈中的评分维度,对每个维度的对应星级计数累加,同时记录该维度的总反馈数。
  • 计算阶段:对每个维度,用「星级×对应计数」的总和除以总反馈数,得到加权平均分,和你给出的公式逻辑完全一致。

如果后续新增其他评分维度(比如design),代码不需要修改就能自动统计计算,扩展性很强。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 04:45:35