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

统计二维数组中各关联键对应的非空值数量

统计数组对象中各键的非空值数量

嘿,这是个很实用的统计需求,我来给你一个简洁的JavaScript实现方案:

首先先明确你的输入和预期输出:

输入数组:

[ {0:1, 1:5, 3:null}, {0:4, 1:null, 3:null}, {0:null, 1:5, 3:5} ]

预期输出:

[{0:2, 1:2, 3:1}]

实现代码

我们可以利用数组的reduce方法来遍历并累加计数,配合Object.entries遍历每个对象的键值对:

const input = [ {0:1, 1:5, 3:null}, {0:4, 1:null, 3:null}, {0:null, 1:5, 3:5} ];

// 用reduce统计每个键的非空值数量
const countResult = input.reduce((acc, currentObj) => {
  // 遍历当前对象的所有键值对
  Object.entries(currentObj).forEach(([key, value]) => {
    // 只统计值不为null的情况
    if (value !== null) {
      // 如果键还没在累加对象里,初始化为0再+1,否则直接+1
      acc[key] = (acc[key] || 0) + 1;
    }
  });
  return acc;
}, {});

// 按照预期格式包装成数组
const finalResult = [countResult];

console.log(finalResult); // 输出 [{0:2, 1:2, 3:1}]

代码解释

  • reduce方法的初始值是一个空对象{},用来存储每个键的计数
  • Object.entries(currentObj)把当前对象转换成键值对数组,方便遍历
  • 判断value !== null确保只统计非空的有效值(如果你的场景里还有其他空值比如undefined,可以改成value != null来兼容)
  • acc[key] = (acc[key] || 0) + 1处理键首次出现的情况,初始化为0后再加1,之后每次遇到就累加

这个方案简洁高效,时间复杂度是O(n*m),其中n是数组长度,m是每个对象的键的数量,完全能满足你的需求~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:09:19