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

如何在不直接引用对象的情况下获取数组内对象的变量名?

如何获取数组内对象对应的原变量名?

首先明确: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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 04:15:42