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

JavaScript groupByAndCount函数报Unexpected token错误的解决咨询

解决JavaScript groupByAndCount函数的「Unexpected token」错误

错误原因分析

你遇到的错误有两个核心问题:

  1. 语法兼容性问题:??= 是ES2020引入的「空值赋值运算符」,如果你的运行环境(旧版Node.js、浏览器)不支持ES2020语法,就会抛出「Unexpected token」错误。
  2. 变量未定义错误:代码中的[length]是未声明的变量,你实际想要访问的是数组中存储计数的位置——从[...group, 0]的结构来看,计数应该在数组的第2个位置(索引1)。

修复方案

方案1:兼容旧环境的写法

替换??=为传统的条件判断,同时修正计数索引:

function groupByAndCount(arr, groupFn) {
  return arr.reduce((acc, item) => {
    const group = groupFn(item);
    const key = JSON.stringify(group);
    
    // 用if判断替代??=,兼容旧环境
    if (!acc[key]) {
      acc[key] = [...group, 0];
    }
    // 修正为索引1,累加计数
    acc[key][1]++;
    
    return acc;
  }, {});
}

方案2:保留简洁语法(仅支持ES2020+环境)

如果你的运行环境已经支持ES2020(比如Node.js 14+、现代浏览器),只需修正[length]为[1]即可:

function groupByAndCount(arr, groupFn) {
  return arr.reduce((acc, item) => {
    const group = groupFn(item);
    const key = JSON.stringify(group);
    
    // 保留??=,但修正计数索引
    (acc[key] ??= [...group, 0])[1]++;
    
    return acc;
  }, {});
}

额外说明

  • 使用JSON.stringify(group)作为键,要注意分组值的序列化一致性(比如对象顺序、特殊值的序列化结果),如果分组键是基础类型(字符串、数字),可以直接用原值作为键,避免序列化开销。
  • 如果需要将最终结果的键还原为原始分组值,可以在函数最后遍历对象,将JSON.parse(key)作为新键。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 12:17:55