如何在Javascript中使用一个函数为多个变量分配不同的值

如何在Javascript中使用一个函数为多个变量分配不同的值,javascript,arrays,Javascript,Arrays,我有一系列数组,每个数组包含20个不同的字符串,基本上如下所示: const str1a = [ "Text", "Different text", "etc", ... ]; const str1b = [ "something else", "more options", "and more", ... ]; 等等,等等。目前我使用以下代码从每个数组中选取一个随机字符串并连接它们(这是用于诗歌生成器的): const generatorDiv=document.querySelector

我有一系列数组,每个数组包含20个不同的字符串,基本上如下所示:

const str1a = [
"Text",
"Different text",
"etc",
...
];

const str1b = [
"something else",
"more options",
"and more",
...
];
等等,等等。目前我使用以下代码从每个数组中选取一个随机字符串并连接它们(这是用于诗歌生成器的):

const generatorDiv=document.querySelector(“#generator”);
函数writePoem(){
设i=Math.floor(21*Math.random());
设j=Math.floor(21*Math.random());
设k=Math.floor(21*Math.random());
设l=Math.floor(21*Math.random());
设m=Math.floor(21*Math.random());
设n=Math.floor(21*Math.random());
设o=Math.floor(21*Math.random());
设p=Math.floor(21*Math.random());
设q=Math.floor(21*Math.random());
generatorDiv.innerHTML=str1a[i]+str1b[j]+str1c[k]+str1d[l]+“
”+ str2a[m]+str2b[n]+str2c[o]+str2d[p]+str2e[q]; } writePoem();
我很难弄清楚的是(如果有人问我这个问题,请原谅,我尝试了一系列搜索参数,但感觉好像我没有使用正确的词语)

有什么方法可以简化所有的,让i,让j,让k

这是我最好的尝试,但没有成功:

function pickStr () {
  Math.floor(21*Math.random());
}

const randomnessStorage = [i, j, k, l, m, n, o, p, q];

for (let a = 0; a < 10; a++) {
  let randomnessStorage[a] = pickStr();
}
函数pickStr(){
Math.floor(21*Math.random());
}
常数随机存储=[i,j,k,l,m,n,o,p,q];
for(设a=0;a<10;a++){
设randomnessStorage[a]=pickStr();
}

您的代码几乎正确

您没有在
pickStr
中返回任何内容

  • 获取数组范围内的随机索引
    Math.floor(Math.random()*arr.length)
  • 挑一根线

const str1a=[
“我可以吗”,
“做到了”,
“是吗?”
];
常数str1b=[
“跟随”,
“抓”,
“下降”
];
常数str1c=[
“一个苹果”,
“汽车”,
“卡车”
];
常数str1d=[
“飞行”,
“驾驶”,
“咀嚼”
];
函数pickStr(arr){
如果(arr){
让randomIndex=Math.floor(Math.random()*arr.length);
返回arr[随机索引];
}否则{
返回“-Array Null-”;
}
}
函数writePoem(){
让div=document.querySelector(“#poem container”);
让poemTemplate=`${pickStr(str1a)}${pickStr(str1b)}${pickStr(str1c)}${pickStr(str1d)}`;
div.innerHTML=poemTemplate;
}
writePoem()

你走的方向是对的。在
pickStr
函数中添加
return
语句,并更新
writePoem
函数,如下所示:

function pickStr () {
  return Math.floor(21*Math.random());
}

function writePoem () {
  generatorDiv.innerHTML = str1a[pickStr()] + str1b[pickStr()] + str1c[pickStr()] + str1d[pickStr()] + "<br />" +
    str2a[pickStr()] + str2b[pickStr()] + str2c[pickStr()] + str2d[pickStr()] + str2e[pickStr()];
}
函数pickStr(){
返回Math.floor(21*Math.random());
}
函数writePoem(){
generatorDiv.innerHTML=str1a[pickStr()]+str1b[pickStr()]+str1c[pickStr()]+str1d[pickStr()]+“
”+ str2a[pickStr()]+str2b[pickStr()]+str2c[pickStr()]+str2d[pickStr()]+str2e[pickStr()]; }
您可以将数组存储在一个数组中,并创建一个es6
pickstr
函数,该函数将返回一个随机数字

 function writePoem () {
 let pickstr = () => Math.random() * 21 | 0,
 output = [str1a, str1b, str1c, str1d, str2a, str2b, str2c, str2d, str2e].map(str=>str[pickstr()]); 
 output.splice(4,0, "<br />")
 generatorDiv.innerHTML = output.join("");
 }

 writePoem ();
函数writePoem(){
让pickstr=()=>Math.random()*21 | 0,
输出=[str1a,str1b,str1c,str1d,str2a,str2b,str2c,str2d,str2e].map(str=>str[pickstr()]);
输出拼接(4,0,“
”) generatorDiv.innerHTML=output.join(“”); } writePoem();
const str1a=[“一”,“二”,“三”,“四],
str1b=[“五”,“六”,“七”,“八],
str1c=[“九”,“十”,“十一”,“十二];让generatorDiv=document.querySelector(“#gendiv”);
函数writePoem(){
让pickstr=()=>Math.random()*4 | 0,
输出=[str1a,str1b,str1c,str1a,str1b,str1c].map(str=>str[pickstr()]);
输出拼接(3,0,“
”); generatorDiv.innerHTML=output.join(“”); } writePoem()
如果我是你,我会修改结构,使其成为对象的数组,而不是多个独立的数组

var str = [{
    'str1a': ["Text",
      "Different text",
      "etc",
    ]
  },
  { 'str1b': [...] },
  { 'str1c': [...] },
  { 'str1d': [...] }
];
然后我以这种方式生成随机诗:

const generatorDiv=document.querySelector(“#generator”);
var str=[{
'str1a':[“文本”,
“不同文本”,
“等等”,
]
},
{
“str1b”:[
“其他东西”,
“更多选项”,
“还有更多”,
]
},
{
‘str1c’:[
“还有什么事吗”,
“les选项”,
“或更多”,
]
},
{
“str1d”:[
“否则”,
“更少”,
“更多”,
]
}
];
函数pickStr(arr){
让ran=Math.floor(Math.random()*arr.length);
返回arr[ran];
}
结果=[];
str.forEach(myFunction);
函数myFunction(项目、索引){
用于(var输入项){
结果.推送(pickStr(项[键])
}
}
console.log(result.join(“”))
generatorDiv.innerHTML=result.join(“”)

生成div内容后需要存储随机数有什么原因吗?您应该
在pickStr函数中返回
值。。它不返回任何值,只是执行数学函数。不要在数组中使用二十个变量。使用一个数组,就这样!非常感谢。其他答案中也有很好的建议,但这正好解决了我的问题。
var str = [{
    'str1a': ["Text",
      "Different text",
      "etc",
    ]
  },
  { 'str1b': [...] },
  { 'str1c': [...] },
  { 'str1d': [...] }
];