如何在不直接引用对象的情况下获取数组内对象的变量名?
如何获取数组内对象对应的原变量名?
首先明确:JavaScript中的对象本身不会记录指向它的变量名。你把object1、object2这类变量push到数组后,数组里只保存了对象的引用,原变量名和对象之间的关联在这一步就断开了,所以没法直接从数组里的对象反推出原来的变量名。
为什么你的两种方案都失败了?
- 第一种方案里,
{myArrayForObjects[i]}其实是创建了一个键名为字符串"myArrayForObjects[i]"的新对象,自然拿不到原变量名。 - 第二种方案里,
Object.keys(myArrayForObjects)获取的是数组的数字索引(因为数组本质是键为索引的特殊对象),所以输出0、1、2是必然结果。
可行的解决方案
方案1:给对象添加名称属性(最推荐)
直接在定义对象时加入name属性,把原变量名存进去,之后不管怎么传递对象,都能直接拿到名称:
// 定义对象时添加name属性 const object1 = { name: 'object1', /* 其他属性 */ }; const object2 = { name: 'object2', /* 其他属性 */ }; const object3 = { name: 'object3', /* 其他属性 */ }; let myArrayForObjects = []; function firstFunc(){ myArrayForObjects.push(object1, object2, object3); } function secondFunc(){ for (const obj of myArrayForObjects) { console.log(obj.name); // 输出object1、object2、object3 } }
方案2:存储键值对而非纯对象
如果不想修改原对象,可以在push的时候把变量名和对象一起存成键值对结构:
const object1 = { /* 其他属性 */ }; const object2 = { /* 其他属性 */ }; const object3 = { /* 其他属性 */ }; let myArrayForObjects = []; function firstFunc(){ // 存成{ key: 变量名, value: 对象 }的形式 myArrayForObjects.push( { key: 'object1', value: object1 }, { key: 'object2', value: object2 }, { key: 'object3', value: object3 } ); } function secondFunc(){ for (const item of myArrayForObjects) { console.log(item.key); // 输出object1、object2、object3 // 如果需要操作对象,用item.value } }
总结
没有办法直接从数组中的对象反推出它原来的变量名,因为变量名只是对象的引用标识符,不会被对象本身保留。最稳妥的方式就是主动为对象绑定名称信息,要么给对象加属性,要么存储键值对结构。
内容的提问来源于stack exchange,提问作者carl6005
相关产品推荐
相关产品推荐

