如何获取作为Map键传入的对象的变量名并按指定格式输出内容?
如何获取作为Map键传入的对象的变量名并按指定格式输出内容?
嘿,我明白你遇到的问题啦——你想把作为Map键的那些变量名(比如personObj、carObj)给打印出来,但直接遍历Map.keys()只能拿到对象本身,根本拿不到变量名对吧?这是因为当你把对象作为Map的键时,Map存储的是这个对象的引用,而不是你给它起的变量名。那咱们换个思路来解决这个问题:
核心思路是把变量名和对应的值/函数绑定在一起存储,这样就能同时拿到名称和内容,然后按照你想要的格式输出。
修改后的完整代码示例
const personObj = { fName: 'John', lName: 'Doe', age: 30 }; const carObj = { type: 'Fiat', model: 500, color: 'blue' }; const workDetailsObj = { designation: 'Software Engineer', salary: 30000, company: 'GE' }; function displayColors() { return `Red Color`; // 改成返回值,方便我们直接获取输出内容 } let primitiveValue = `Map Object's Contents`; // 用数组保存每个条目的名称、类型和对应值,把变量名和值绑定 const entries = [ { name: 'personObj', value: personObj, type: 'object' }, { name: 'carObj', value: carObj, type: 'object' }, { name: 'workDetailsObj', value: workDetailsObj, type: 'object' }, { name: 'displayFunction', value: displayColors, type: 'function' }, { name: 'primitiveValue', value: primitiveValue, type: 'primitive' } ]; // 如果还是需要使用Map,我们可以基于这个数组构建(保留原需求的Map功能) const mapObj = new Map(); entries.forEach(entry => { mapObj.set(entry.value, entry); // 把对象/值作为键,存储包含名称的完整条目 }); // 按照你想要的格式输出内容 entries.forEach(entry => { switch(entry.type) { case 'object': console.log(`${entry.name} details:\n`); Object.entries(entry.value).forEach(([key, val]) => { console.log(`${key} : '${val}'`); }); console.log('\n'); break; case 'function': console.log(`${entry.name} output:\n`); console.log(entry.value()); // 调用函数并打印返回的内容 console.log('\n'); break; case 'primitive': console.log(`${entry.name} value\n`); console.log(`: ${entry.value}.\n`); break; } });
代码说明
- 绑定变量名与值:通过
entries数组,我们把每个变量的名称、类型和对应值存在一起,这样就能轻松获取你想要的personObj这类变量名了。 - 兼容Map需求:如果还是需要使用Map,我们可以基于这个数组构建,把对象/原始值作为键,存储包含名称的完整条目,兼顾原需求的Map功能。
- 格式输出:通过判断类型,分别处理对象(遍历键值对)、函数(调用并打印返回值)、原始值(直接输出),完全匹配你想要的输出格式。
运行这段代码后,控制台就会输出你期望的内容啦!
备注:内容来源于stack exchange,提问作者TEC_Abode of Learning
相关产品推荐
相关产品推荐

