使用reduce统计数组元素频次后,obj1[1]输出undefined的解决方法
问题原因
你得到的obj1是一个普通对象,它的键是各个职位的字符串(比如'Orchestrator'),值是对应频次。对象没有数字索引,所以用obj1[1]访问自然返回undefined。
解决办法
根据你的需求不同,有几种处理方式:
1. 按顺序访问第n个统计项
如果想按职位出现的顺序(或对象键的顺序)获取第n个统计结果,可以把对象转换成键值对数组:
// 将频次对象转为 [职位名称, 频次] 格式的数组 const statsArray = Object.entries(obj1); // 访问第2个统计项(数组索引从0开始,所以1对应第二个元素) console.log(statsArray[1]); // 输出 ["Architect", 6] // 如果只需要频次,取数组的第二个元素 console.log(statsArray[1][1]); // 输出 6
2. 直接通过职位名称访问频次
这是这个频次对象的标准用法,直接用职位字符串作为键访问:
console.log(obj1['Architect']); // 输出 6 // 或者用点语法(键名符合标识符规则时可用) console.log(obj1.Architect); // 输出 6
3. 生成带数字索引的数组(按需使用)
如果确实需要用数字索引访问,可以在统计时构建数组,同时记录职位到索引的映射:
const positionIndexMap = {}; const statsArray = positionx.reduce((acc, curr) => { // 如果当前职位还没分配索引,就分配一个新索引 if (!positionIndexMap.hasOwnProperty(curr)) { positionIndexMap[curr] = acc.length; acc.push(1); } else { // 已有索引,直接累加频次 acc[positionIndexMap[curr]]++; } return acc; }, []); // 此时statsArray是数组,可用数字索引访问 console.log(statsArray[1]); // 输出 6(对应Architect的频次) // 如果需要知道索引对应的职位,可通过positionIndexMap反向查找 const targetPosition = Object.keys(positionIndexMap).find(key => positionIndexMap[key] === 1); console.log(targetPosition); // 输出 "Architect"
内容的提问来源于stack exchange,提问作者Lax
相关产品推荐
相关产品推荐

