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

如何获取数组中存储的空对象对应的原变量名

实现方案

首先你原来的写法没法直接拿到变量名,原因是数组存储的是foo、bar、baz的对象引用,没有保留对应的变量名信息,JS运行时也不会主动给你暴露局部变量的名称映射。

推荐实现方式

主动在数组中存储变量名和对应值的映射关系,代码如下:

// 声明变量
const foo = {}
const bar = { a: 1 }
const baz = {}

// 数组存储关联了变量名的结构
const array = [
  { name: 'foo', value: foo },
  { name: 'bar', value: bar },
  { name: 'baz', value: baz }
]

// 筛选空对象对应的变量名
const emptyVarNames = array
  .filter(item => Object.keys(item.value).length === 0)
  .map(item => item.name)

console.log(emptyVarNames) // 输出:['foo', 'baz']

不推荐的特殊场景实现

如果你的变量是全局作用域下用var声明的,可以通过全局对象查找变量名,该方法高度依赖作用域环境,生产环境不建议使用:

var foo = {}
var bar = { a: 1 }
var baz = {}
const array = [foo, bar, baz]

const emptyVarNames = Object.keys(window)
  .filter(key => 
    array.includes(window[key]) 
    && Object.keys(window[key]).length === 0
  )

console.log(emptyVarNames) // 输出:['foo', 'baz']

额外注意事项

  • 遍历筛选场景如果不需要生成映射后的新数组,优先用forEach或者filter,不要用map,避免无意义的内存占用。
  • 空对象判断要注意如果对象的原型上有可枚举属性,Object.keys不会统计,如果你需要覆盖这种场景,可以改用for...in遍历判断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 01:15:04