无法连接两个变量

时间:2016-08-25 12:24:23

标签: javascript arrays string-concatenation

我是一个新手,通过阵列进行一些练习。我曾尝试从以前的文章中解决这个问题,但似乎都没有相关的情况。

我想使用数组中的短语将句子随机生成段落。我让随机句生成部分正常工作。

    var ipsumText = ["adventure", "endless youth", "dust", "iconic landmark", "spontaneous", "carefree", "selvedge","on the road", "open road", "stay true", "free spirit", "urban", "live on the edge", "the true wanderer", "vintage motorcyle", "american lifestyle", "epic landscape", "low slung denim", "naturaL"];

//a simple function to print a sentence //

var sentence = function (y) { 
var printSentence = "";
for (i=0; i<7; i++) { 
    //random selection of string from array //
    var x = Math.floor(Math.random() * 20);
    printSentence += y [x] + " "; 
}
return printSentence
};

console.log(sentence(ipsumText));

但现在我希望能够在句子末尾添加逗号或句号。

因为句子中使用的数组中的每个单词/短语都打印出后面的空格,我需要在其后面添加一个带句号或逗号的额外单词以避免它们之间的空格。为此,我创建了一个额外的变量

 // create a word and full stop to end a sentence//
var addFullstop = ipsumText[Math.floor(Math.random() * ipsumText.length)] + ". ";
var addComma = ipsumText[Math.floor(Math.random() * ipsumText.length)] + ", ";

这些变量对我自己的期望有所帮助。他们用逗号或句号印刷随机单词。

但是现在我无法弄清楚如何让它们添加到句子的末尾。我已经尝试了很多引用文章的版本,但是我错过了一些东西,因为当我测试它时,我什么都没有打印到控制台日志。

这是我最近尝试过的。

// add the sentence and new ending together //
var fullSentence = sentence(ipsumText) + addFullstop;
console.log(fullSentence)

有人可以解释为什么这不起作用吗?并建议尝试解决方案? 感谢

1 个答案:

答案 0 :(得分:1)

参见ES6小提琴:http://www.es6fiddle.net/isadgquw/

你的例子有效。但考虑一种更灵活的不同方法。你给它一个单词数组,你想要多长时间的句子,如果你想要一个句子的结尾,传入end,否则,只要把它留出来就不会被使用。

第一行生成一个长度为count的数组,该数组由随机索引组成,用于索引单词数组。下一行将这些索引映射到实际单词。最后一行将所有这些连接成一个由单个空格分隔的句子,并带有调用者指定的句子的可选结尾。

const randomSent = (words, count, end) =>
    [...Array(count)].map(() => Math.floor(Math.random() * words.length))
                     .map(i => words[i])
                     .join(' ') + (end || '')

randomSent (['one','two','x','compound word','etc'], 10, '! ')
// x x one x compound word one x etc two two!

为了使其更灵活,请考虑为每项任务创建一个功能。代码是可重用的,特定的,并且没有使用可变变量,因此您可以轻松地测试,理解和编写:

const randInt = (lower, upper) =>
    Math.floor(Math.random() * (upper-lower)) + lower

const randWord = (words) => words[randInt(0, words.length)]

const randSentence = (words, len, end) =>
    [...Array(len)].map(() => randWord(words))
                   .join(' ') + (end || '')

const randWordWithEnd = (end) => randWord(ipsumText) + end
const randWordWithFullStop = randWordWithEnd('. ')
const randWordWithComma    = randWordWithEnd(', ')

// Now, test it!
const fullSentWithEnd = randSentence(ipsumText, 8, '!!')
const fullSentNoEnd = randSentence(ipsumText, 5)
const fullSentComposed = fullSentNoEnd + randWordWithFullStop

为方便起见再次链接:http://www.es6fiddle.net/isadgquw/