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

如何修改JavaScript代码实现按子数组平均值分组对应索引?

问题:按子数组平均值分组索引

需求说明

给定一个二维数组,需要完成以下操作:

  • 计算每个子数组的平均值
  • 将具有相同平均值的子数组对应的索引分组
  • 输出不重复的分组数组,仅保留子数组在输入数组中的索引

示例输入

[
  [3, 3, 4, 2], // index 0: average = 3
  [4, 4],       // index 1: average = 4
  [4, 0, 3, 3], // index 2: average = 2.5
  [2, 3],       // index 3: average = 2.5
  [3, 3, 3],    // index 4: average = 3
];

预期输出

[[0, 4], [1], [2, 3]]

原因说明

索引0和4的子数组平均值均为3,索引1的平均值4唯一,索引2和3的平均值均为2.5,因此按上述分组。

现有代码问题

我编写了如下JavaScript代码,能正确计算平均值,但无法将索引按对应平均值分组得到预期输出,请问如何修改?

function solution(a) {
  let b = [];
  let entier = {};
  a.filter((elt, cle) => {
    let s = a[cle].reduce((prevalue, curvalue) => prevalue + curvalue, 0);
    b[cle] = s / a[cle].length;
    entier[cle] = s / a[cle].length;
  });
  console.log(entier);
  let arrNew = Object.entries(entier);
  console.log(arrNew);
}

let a = [
  [3, 3, 4, 2],
  [4, 4],
  [4, 0, 3, 3],
  [2, 3],
  [3, 3, 3],
];

solution(a); // 期望输出 [[0, 4], [1], [2, 3]]

解决方案

原代码的核心问题是:将索引作为键、平均值作为值存入对象,这无法实现按平均值分组的需求。正确的思路应该是用平均值作为键,对应的索引数组作为值来构建分组映射。

修改后的代码

function solution(a) {
  // 初始化分组对象,键为平均值,值为对应索引的数组
  const groups = {};

  a.forEach((subArr, index) => {
    // 计算子数组的总和
    const sum = subArr.reduce((prev, curr) => prev + curr, 0);
    // 计算平均值
    const average = sum / subArr.length;

    // 处理分组逻辑
    if (!groups[average]) {
      // 如果当前平均值不存在,创建新数组存入索引
      groups[average] = [index];
    } else {
      // 如果已存在,将索引追加到对应数组
      groups[average].push(index);
    }
  });

  // 提取对象的所有值,得到最终分组数组
  return Object.values(groups);
}

let a = [
  [3, 3, 4, 2],
  [4, 4],
  [4, 0, 3, 3],
  [2, 3],
  [3, 3, 3],
];

console.log(solution(a)); // 输出 [[0, 4], [1], [2, 3]]

关键修改点说明

  1. 替换遍历方法:用forEach替代filter,因为我们不需要过滤数组,只是需要遍历每个子数组并处理索引。
  2. 重构分组逻辑:
    • 用average作为groups对象的键,确保相同平均值的索引会被归到同一组。
    • 检查键是否存在,不存在则初始化新数组,存在则追加索引。
  3. 生成结果:通过Object.values(groups)直接提取所有分组数组,得到预期的二维数组结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 08:36:22