[英]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.