JavaScript中如何访问discord.js fetch返回的Map内User对象的username属性
解决JavaScript中从fetch返回的Map里获取User对象username的问题
嘿,我来帮你搞定这个问题!你现在的核心是从只有一个条目的Map里取出User对象,再访问它的username属性,之前的尝试没成功大概率是因为没正确从Map里拿到User实例,我给你几个可行的方案:
方法1:直接提取Map的第一个值(最简洁)
因为你的Map只有一个键值对,直接把Map的值转成数组后取第一个元素就行:
// 假设你的Map变量叫thisVar const user = Array.from(thisVar.values())[0]; const targetUsername = user.username; console.log(targetUsername); // 输出someUserName
thisVar.values()会返回Map所有值的迭代器,用Array.from()转成数组后,第一个元素就是你要的User对象,之后直接访问username就没问题了。
方法2:通过唯一的键获取User对象
既然你说Map的键和User对象的id完全相同,也可以先拿到这个键,再用Map.get()方法取出对象:
// 获取Map里的唯一键 const userId = thisVar.keys().next().value; // 用键取出User对象 const user = thisVar.get(userId); // 访问username const targetUsername = user.username;
这里keys().next().value是从Map的键迭代器里取出第一个(也是唯一一个)键值,再传给get()就能拿到对应的User实例。
方法3:用for...of遍历Map
这种方式更直观,适合不确定Map条目数量的情况(不过你这里只有一个):
for (const [key, user] of thisVar) { const targetUsername = user.username; console.log(targetUsername); break; // 因为只有一个条目,遍历一次就退出循环 }
为什么之前的尝试没成功?
你之前用let someVar = thisVar.username;肯定不行,因为thisVar是Map对象,它本身没有username属性;而如果用get()没成功,大概率是你传的键不对——比如你可能硬写了字符串<id>,而不是Map实际存储的那个真实id值,上面的方法会自动获取到正确的键,所以能解决问题。
内容的提问来源于stack exchange,提问作者xFgn
相关产品推荐
相关产品推荐

