JavaScript数组随机选择问题:需返回变量名与对应值
问题分析与修复方案
先看你给出的原代码:
var eg = "one" var eg2 = "two" var eg3 = "three" function randomchoose() { var rand = ["eg", "eg2", "eg3"]; var act = [eg, eg2, eg3]; choose = rand[Math.floor(Math.random()*rand.length)] chosen = act[choose] return [chosen, choose]; }
你遇到的问题核心是:数组不能用字符串作为索引来取值。原代码里rand存的是变量名字符串(比如"eg"),act是按顺序存的变量值数组,当你用act[choose]时,choose是字符串,数组只会把它当成属性名而非索引,自然拿不到对应的值。
结合你补充的「需要返回变量名和对应实际值」的需求,用对象做映射是最直接的解决方式,修改后的代码如下:
var eg = "one" var eg2 = "two" var eg3 = "three" function randomchoose() { // 用对象建立变量名和值的映射关系 const variableMap = { eg: eg, eg2: eg2, eg3: eg3 }; // 获取所有变量名的数组 const variableNames = Object.keys(variableMap); // 随机挑选一个变量名 const chosenVarName = variableNames[Math.floor(Math.random() * variableNames.length)]; // 通过变量名从对象中取出对应的值 const chosenValue = variableMap[chosenVarName]; return [chosenValue, chosenVarName]; }
为什么这样能解决问题?
- 对象的键可以是字符串(正好对应你的变量名字符串),通过键就能直接拿到对应的值,完美匹配你的需求;
Object.keys(variableMap)会返回对象所有键的数组,也就是["eg", "eg2", "eg3"],和你原来的rand数组作用一样,但后续取值更直接;- 最终返回的
[chosenValue, chosenVarName]正好是你要的「实际值」和「变量名」。
你可以测试一下这个函数,每次调用都会随机返回["one", "eg"]、["two", "eg2"]或者["three", "eg3"],完全符合你的要求。
内容的提问来源于stack exchange,提问作者Cate
相关产品推荐
相关产品推荐

