统计二维数组中各关联键对应的非空值数量
统计数组对象中各键的非空值数量
嘿,这是个很实用的统计需求,我来给你一个简洁的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
相关产品推荐
相关产品推荐

