Есть ли способ написать и я / еще заявление в document.write? - PullRequest
0 голосов
/ 08 января 2020

Я пытаюсь создать текстовый рандомизатор, который будет создавать новые предложения с учетом определенных слов и места их размещения. Я создал массивы существительных, глаголов, количеств и т. Д. c. Проблема в том, что мне нужно, чтобы оно могло давать различное количество определенных существительных (например, одно яблоко, два банана), и мне нужно, чтобы оно соответствовало количеству единственного или множественного числа слова. Я не могу сказать, "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] + "."); 

Ответы [ 2 ]

3 голосов
/ 08 января 2020

Используйте условный оператор. Если случайная сумма равна 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 или что-то в этом роде. (См. Почему document.write считается "плохой практикой"?

0 голосов
/ 08 января 2020

Ответ от @CertainPerformance очень хороший - но имейте в виду, что множественное число не всегда является просто добавлением "s" - возьмите в качестве примера слова "малина" / "малина".

Обычно я склонен добавьте обе версии в массив и выберите, какую из них взять в соответствии с количеством, примерно так:

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]}.`);
...