我正在尝试使文本随机化,这将根据给定的单词及其放置位置来创建新句子。我已经创建了名词,动词,数量等的数组。问题是,我需要它能够赋予不同数量的某些名词(例如,一个苹果,两个香蕉),并且需要将其数量与该单词的单数或复数形式。我不能说"one apples"
或"two banana"
。我想知道这样做的最好方法。我曾考虑过使用if / else语句,但不确定document.write
中是否可能。我在很多地方都需要用很长的句子才能做到这一点,所以我试图避免编写一百万个不同的数组。
var amount = ["zero", "one", "two"];
var fruit = ["apple", "banana", "orange", "grape"];
var rand1 = [Math.floor ( Math.random() * amount.length )];
var rand2 = [Math.floor ( Math.random() * fruit.length )];
document.write("I have" + " " + amount[rand1] + fruit[rand2] + ".");
使用条件运算符。如果随机数为one
,请不要添加s
,否则请添加s
:
var amount = ["zero", "one", "two"];
var fruit = ["apple", "banana", "orange", "grape"];
var rand1 = [Math.floor(Math.random() * amount.length)];
var rand2 = [Math.floor(Math.random() * fruit.length)];
document.write("I have" + " " + amount[rand1] + ' ' + fruit[rand2] + (amount[rand1] === 'one' ? '' : 's') + ".");
使用模板文字可能更具可读性:
var amount = ["zero", "one", "two"];
var fruit = ["apple", "banana", "orange", "grape"];
var rand1 = [Math.floor(Math.random() * amount.length)];
var rand2 = [Math.floor(Math.random() * fruit.length)];
document.write(`I have ${amount[rand1]} ${fruit[rand2]}${amount[rand1] === 'one' ? '' : 's'}.`);
表达式
amount[rand1] === 'one' ? '' : 's'
意味着:如果表达式amount[rand1]
的值为one
,则条件表达式的整体值为''
,否则整个条件表达式的值为''
。当您需要一些值求一个或另一个值时,它是if
/ else
的更简洁版本。
还请注意,document.write
很少是一个好主意-如果您想向用户显示数据,请考虑将文本插入到元素中或使用console.log
或类似方法。 (请参见Why is document.write considered a "bad practice"?
@ CertainPerformance的答案非常好-但请记住,复数并不总是只是添加的“ s-以” raspberry“ /” raspberries“为例。
我通常倾向于将两个版本都添加到数组中,然后根据数量选择哪个版本,如下所示:
var amount = ["zero", "one", "two"];
var fruit = [
["apple","apples"],
["banana","bananas"],
["orange","oranges"],
["grape","grapes"],
["raspberry","raspberries"]
];
var rand1 = [Math.floor(Math.random() * amount.length)];
var rand2 = [Math.floor(Math.random() * fruit.length)];
document.write(`I have ${amount[rand1]} ${fruit[rand2][amount[rand1] === 'one' ? 0 : 1]}.`);