在document.write中是否可以编写和执行i / else语句?

问题描述 投票:0回答:2

我正在尝试使文本随机化,这将根据给定的单词及其放置位置来创建新句子。我已经创建了名词,动词,数量等的数组。问题是,我需要它能够赋予不同数量的某些名词(例如,一个苹果,两个香蕉),并且需要将其数量与该单词的单数或复数形式。我不能说"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] + "."); 
javascript arrays if-statement document.write
2个回答
3
投票

使用条件运算符。如果随机数为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"?


0
投票

@ 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]}.`);
© www.soinside.com 2019 - 2024. All rights reserved.