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

Node.js读取XLSX列并统计数字出现次数的实现求助

Node.js 实现XLSX数据列的数字频次统计

前提假设

你已经通过xlsx库将Excel文件转为如下结构的JSON数组(示例):

const excelJsonData = [
  { numbers: "1-3-5-7-9", lucky_numbers: "2" },
  { numbers: "2-4-6-8-10", lucky_numbers: "5" },
  { numbers: "1-2-3-4-5", lucky_numbers: "2" },
  // ... 更多数据行
];

步骤1:编写通用统计函数

先写一个复用的频次统计函数,接收数字数组,返回以数字为键、频次为值的对象:

function countNumberOccurrences(numArray) {
  return numArray.reduce((countMap, num) => {
    // 统一转成数字类型,避免字符串/数字类型不一致导致统计错误
    const number = Number(num);
    countMap[number] = (countMap[number] || 0) + 1;
    return countMap;
  }, {});
}

步骤2:分别处理两列数据

处理numbers列(拆分"-"分隔的数字串)

遍历JSON数组,拆分每个numbers字段的字符串为单个数字,合并成一个大数组后统计:

// 提取并拆分所有numbers列的数字
const allNumbers = excelJsonData.flatMap(item => {
  return item.numbers.split("-");
});
// 统计频次
const numbersCount = countNumberOccurrences(allNumbers);

处理lucky_numbers列(单个数字)

直接提取所有lucky_numbers字段值,转成数组后统计:

// 提取所有lucky_numbers列的数字
const allLuckyNumbers = excelJsonData.map(item => {
  return item.lucky_numbers;
});
// 统计频次
const luckyNumbersCount = countNumberOccurrences(allLuckyNumbers);

步骤3:对统计结果排序

根据需求选择排序方式:

按数字大小排序

将统计对象转为数组,按数字升序/降序排列:

// 按数字升序排序numbers列统计结果
const sortedNumbersByValue = Object.entries(numbersCount)
  .sort((a, b) => Number(a[0]) - Number(b[0]));

// 按数字升序排序lucky_numbers列统计结果
const sortedLuckyByValue = Object.entries(luckyNumbersCount)
  .sort((a, b) => Number(a[0]) - Number(b[0]));

按频次高低排序

按频次从高到低(或低到高)排列:

// 按频次降序排序numbers列统计结果
const sortedNumbersByCount = Object.entries(numbersCount)
  .sort((a, b) => b[1] - a[1]);

// 按频次降序排序lucky_numbers列统计结果
const sortedLuckyByCount = Object.entries(luckyNumbersCount)
  .sort((a, b) => b[1] - a[1]);

最终输出示例

比如sortedNumbersByValue会得到类似:

[ [ '1', 2 ], [ '2', 2 ], [ '3', 2 ], [ '4', 2 ], [ '5', 2 ], [ '7', 1 ], [ '8', 1 ], [ '9', 1 ], [ '10', 1 ] ]

你可以根据需要将排序后的数组转回对象,或者直接用于展示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 16:35:22