簡體   English   中英

如何使用Javascript中的一個函數為多個變量分配不同的值

[英]How to assign multiple variables different values using one function in Javascript

我有一系列的數組,每個數組包含20個不同的字符串,基本上是這樣的:

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

const str1b = [
"something else",
"more options",
"and more",
...
];

等等,目前,我使用以下代碼從每個數組中選擇一個隨機字符串並將其連接起來(這適用於詩歌生成器):

const generatorDiv = document.querySelector("#generator");

function writePoem () {
  let i = Math.floor(21*Math.random());
  let j = Math.floor(21*Math.random());
  let k = Math.floor(21*Math.random());
  let l = Math.floor(21*Math.random());
  let m = Math.floor(21*Math.random());
  let n = Math.floor(21*Math.random());
  let o = Math.floor(21*Math.random());
  let p = Math.floor(21*Math.random());
  let q = Math.floor(21*Math.random());
  generatorDiv.innerHTML = str1a[i] + str1b[j] + str1c[k] + str1d[l] + "<br />" +
    str2a[m] + str2b[n] + str2c[o] + str2d[p] + str2e[q];
}

writePoem ();

我想弄清楚的是(請原諒我,如果有人問我,我嘗試了很多搜索參數,但感覺好像我沒有使用正確的單詞)...

有什么方法可以簡化所有讓我,讓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返回任何pickStr

  • 獲取數組Math.floor(Math.random() * arr.length)范圍內的隨機索引
  • 選擇一個字符串

 const str1a = [ "Can I", "Did it", "Was it" ]; const str1b = [ "follow", "catch", "drop" ]; const str1c = [ "an apple", "a car", "the truck" ]; const str1d = [ "flying", "driving", "chewing" ]; function pickStr(arr) { if (arr) { let randomIndex = Math.floor(Math.random() * arr.length); return arr[randomIndex]; } else { return "-Array Null-"; } } function writePoem() { let div = document.querySelector('#poem-container'); let poemTemplate = `${pickStr(str1a)} ${pickStr(str1b)} ${pickStr(str1c)} ${pickStr(str1d)}`; div.innerHTML = poemTemplate; } writePoem(); 
 <div id="poem-container"></div> 

您朝着正確的方向前進。 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()];
}

您可以將數組存儲在數組中,並創建一個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 ();

 const str1a = ["one.", "two.", "three.", "four."], str1b = ["five.", "six.", "seven.", "eight."], str1c = ["nine.", "ten.", "eleven.", "twelve."]; let generatorDiv = document.querySelector("#gendiv"); function writePoem() { let pickstr = () => Math.random() * 4 | 0, output = [str1a, str1b, str1c, str1a, str1b, str1c].map(str => str[pickstr()]); output.splice(3,0, "<br/>"); generatorDiv.innerHTML = output.join(""); } writePoem(); 
 <div id="gendiv"></div> 

如果您是我,那么我將修改結構並將其設置為對象數組,而不是多個單獨的數組

var str = [{
    'str1a': ["Text",
      "Different text",
      "etc",
    ]
  },
  { 'str1b': [...] },
  { 'str1c': [...] },
  { 'str1d': [...] }
];

然后我以這種方式生成隨機詩:

 const generatorDiv = document.querySelector("#generator"); var str = [{ 'str1a': ["Text", "Different text", "etc", ] }, { 'str1b': [ "something else", "more options", "and more", ] }, { 'str1c': [ "anything else", "les options", "or more", ] }, { 'str1d': [ "else", "less", "more", ] } ]; function pickStr(arr) { let ran = Math.floor(Math.random() * arr.length); return arr[ran]; } result = []; str.forEach(myFunction); function myFunction(item, index) { for (var key in item) { result.push(pickStr(item[key])) } } console.log(result.join(' ')) generatorDiv.innerHTML = result.join(' '); 
 <div id="generator"></div> 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM