如何获取数组中存储的空对象对应的原变量名
实现方案
首先你原来的写法没法直接拿到变量名,原因是数组存储的是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
相关产品推荐
相关产品推荐

