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

如何衡量JavaScript对象中数组元素分布的不平等程度?求工具

衡量对象内数组元素分布平等性的JavaScript方案

当然有办法啦!要衡量这种元素分布的平等/不平等程度,最常用的就是统计学里的基尼系数(Gini Coefficient),另外还有**变异系数(Coefficient of Variation)**也能帮你搞定。下面我给你详细说说怎么在JavaScript里实现,不管是自己写函数还是用轻量统计库都可以:

1. 基尼系数(最适合衡量分配不平等)

基尼系数是衡量资源分配不平等程度的经典指标,范围在0到1之间:

  • 0代表绝对平等(每个数组的元素数量完全一致)
  • 1代表绝对不平等(所有元素集中在某一个数组里)

你可以自己实现一个计算函数,逻辑不复杂:

function calculateGiniCoefficient(values) {
  // 先对数组长度排序,这是计算基尼系数的必要步骤
  const sorted = [...values].sort((a, b) => a - b);
  const n = sorted.length;
  let cumulativeSum = 0;
  
  // 计算累计求和项
  for (let i = 0; i < n; i++) {
    cumulativeSum += sorted[i] * (n - i);
  }
  
  // 计算均值,代入基尼系数公式
  const mean = sorted.reduce((acc, val) => acc + val, 0) / n;
  return 1 - (2 * cumulativeSum) / (n * n * mean);
}

// 针对你的对象使用示例
const dataObj = {0: Array(2), 1: Array(11), 2: Array(3), 3: Array(7), 4: Array(5), 5: Array(4)};
// 提取所有数组的长度组成新数组
const arrayLengths = Object.values(dataObj).map(arr => arr.length);
// 计算基尼系数
const giniValue = calculateGiniCoefficient(arrayLengths);
console.log('基尼系数:', giniValue); // 结果约0.3,说明有一定不平等,但不算极端

2. 变异系数(衡量分布离散度)

变异系数是标准差除以均值,数值越大说明数组长度的分布越离散(也就是越不平等),反之则越集中。这个指标适合用来对比不同数据集的离散程度:

function calculateCoefficientOfVariation(values) {
  const n = values.length;
  if (n === 0) return 0;
  
  // 计算均值
  const mean = values.reduce((acc, val) => acc + val, 0) / n;
  if (mean === 0) return 0;
  
  // 计算方差和标准差
  const variance = values.reduce((acc, val) => acc + Math.pow(val - mean, 2), 0) / n;
  const stdDeviation = Math.sqrt(variance);
  
  // 变异系数 = 标准差 / 均值
  return stdDeviation / mean;
}

// 针对你的对象使用示例
const cvValue = calculateCoefficientOfVariation(arrayLengths);
console.log('变异系数:', cvValue); // 结果约0.6,说明分布有一定离散度

3. 用统计库简化(可选)

如果不想自己写函数,也可以用轻量的JavaScript统计库,比如simple-statistics,里面已经封装好了这些统计方法。不过上面的自定义函数已经足够轻量,不需要额外引入依赖。如果要用库的话,示例如下:

// 先通过npm安装:npm install simple-statistics
const ss = require('simple-statistics');
// 计算基尼系数
const giniFromLib = ss.gini(arrayLengths);
// 计算变异系数
const cvFromLib = ss.standardDeviation(arrayLengths) / ss.mean(arrayLengths);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:50:34