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

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]; 
}

为什么这样能解决问题?

  1. 对象的键可以是字符串(正好对应你的变量名字符串),通过键就能直接拿到对应的值,完美匹配你的需求;
  2. Object.keys(variableMap)会返回对象所有键的数组,也就是["eg", "eg2", "eg3"],和你原来的rand数组作用一样,但后续取值更直接;
  3. 最终返回的[chosenValue, chosenVarName]正好是你要的「实际值」和「变量名」。

你可以测试一下这个函数,每次调用都会随机返回["one", "eg"]、["two", "eg2"]或者["three", "eg3"],完全符合你的要求。

内容的提问来源于stack exchange,提问作者Cate

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:29:14