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

如何判断数组内对象是否非空及统计非空对象数量?

嘿,这个问题挺常见的,我来给你一步步拆解清楚~

如何判断数组中的对象是否非空?

首先,判断单个对象是否为非空对象(即包含至少一个可枚举属性),最直接的方式是利用Object.keys()方法:

  • Object.keys(obj)会返回一个包含对象自身所有可枚举属性名的数组
  • 如果这个数组的长度大于0,就说明对象有至少一个属性,也就是非空的

举个简单的验证例子:

const emptyObj = {};
const nonEmptyObj = { name: "Derby County" };

console.log(Object.keys(emptyObj).length > 0); // false(空对象)
console.log(Object.keys(nonEmptyObj).length > 0); // true(非空对象)

你也可以用Object.entries()或Object.values()替代Object.keys(),效果完全一致,比如Object.entries(obj).length > 0,核心原理都是通过属性相关数组的长度判断对象是否有内容。


统计数组中包含至少一个属性的对象数量

针对你给出的需求,我们可以用数组的filter()或reduce()方法轻松实现,两种方式各有侧重:

方法1:filter() + 长度判断(直观易懂)

先过滤出所有非空对象,再取过滤后数组的长度,就是我们要统计的数量:

const arr1 = [{}, {name: "Derby County", odds: 2}, {}, {}];
const count1 = arr1.filter(obj => Object.keys(obj).length > 0).length;
console.log(count1); // 输出 1

const arr2 = [{}, {name: "Derby County", odds: 2}, {name: "Fullham", odds: 3} ,{}];
const count2 = arr2.filter(obj => Object.keys(obj).length > 0).length;
console.log(count2); // 输出 2

方法2:reduce()累加计数(更高效,无额外数组创建)

如果想避免创建过滤后的新数组,可以用reduce()直接累加符合条件的对象数量:

const count = arr.reduce((total, currentObj) => {
  // 每遇到一个非空对象,总数加1,否则保持原数值
  return total + (Object.keys(currentObj).length > 0 ? 1 : 0);
}, 0); // 初始总数设为0

小提醒

上面的方法默认只针对可枚举属性,如果你的对象存在不可枚举属性需要统计,就用Object.getOwnPropertyNames()替代Object.keys()即可——不过日常开发中绝大多数场景都是处理可枚举属性,所以前面的方法完全够用啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:17:44