JavaScript groupByAndCount函数报Unexpected token错误的解决咨询
解决JavaScript groupByAndCount函数的「Unexpected token」错误
错误原因分析
你遇到的错误有两个核心问题:
- 语法兼容性问题:
??=是ES2020引入的「空值赋值运算符」,如果你的运行环境(旧版Node.js、浏览器)不支持ES2020语法,就会抛出「Unexpected token」错误。 - 变量未定义错误:代码中的
[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
相关产品推荐
相关产品推荐

