我不想在javascript上重复相同的代码**新**

时间:2018-03-11 16:49:00

标签: javascript

我在这方面很新......它是用短语的三个部分创建一个引用: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);

3 个答案:

答案 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);

代码示例 - https://codepen.io/nagasai/pen/zWGwPg?editors=1111

答案 2 :(得分:0)

使用array.reduce()。这样您就不必担心startmiddleend长度

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);