我在这方面很新......它是用短语的三个部分创建一个引用:start。中间和结束......并从每个中随机选择一个。
代码有效,但我不想用Math.floor / Math.Random重复下面的代码三次。
关于如何不重复代码的任何想法?
谢谢!
var quotes = {
start: ["start1 ", "start2 ", "start3 "],
middle: ["middle1 ", "middle2 ", "middle3 "],
end: ["end1 ", "end2 ", "end3 "],
};
var quoteRandom = "";
for (var y in quotes) {
console.log(quotes[y]);
}
quoteRandom += quotes.start[Math.floor(Math.random() * 3)];
quoteRandom += " " + quotes.middle[Math.floor(Math.random() * 3)];
quoteRandom += " " + quotes.end[Math.floor(Math.random() * 3)];
console.log(quoteRandom);
答案 0 :(得分:0)
你可以掌握一个函数和一个回调的功能,它基本上是另一个函数的函数,例如为数组的每个项调用函数。
使用的方法:
Object.values
获取对象的所有值
Array#map
为每个项目返回一个值(在这种情况下,获取数组并返回一个随机项目)
以及从数组中获取随机值的函数。
function getRandomValue(array) {
return array[Math.floor(Math.random() * array.length)];
}
var quotes = {
start: ["start1 ", "start2 ", "start3 "],
middle: ["middle1 ", "middle2 ", "middle3 "],
end: ["end1 ", "end2 ", "end3 "],
},
quoteRandom = Object.values(quotes).map(getRandomValue).join(' ');
console.log(quoteRandom);
答案 1 :(得分:0)
将Math.floor(Math.random()* 3)包装为函数的返回值,并在需要时重用相同的函数以避免重复的代码行
var quotes = {
start: ["start1 ", "start2 ", "start3 "],
middle: ["middle1 ", "middle2 ", "middle3 "],
end: ["end1 ", "end2 ", "end3 "],
};
var quoteRandom = "";
for (var y in quotes) {
console.log(quotes[y]);
}
function test(){
return Math.floor(Math.random() * 3)
}
quoteRandom += quotes.start[test()];
quoteRandom += " " + quotes.middle[test()];
quoteRandom += " " + quotes.end[test()];
console.log(quoteRandom);
答案 2 :(得分:0)
使用array.reduce()
。这样您就不必担心start
,middle
和end
长度
var quotes = {
start: ["start1 ", "start2 ", "start3 "],
middle: ["middle1 ", "middle2 ", "middle3 "],
end: ["end1 ", "end2 ", "end3 ","end4 ", "end5 ", "end6"],
};
var quoteRandom = [quotes.start,quotes.middle,quotes.end].reduce((str,el)=> {return str+=el[Math.floor(Math.random() * el.length)]},"");
console.log(quoteRandom);