Почему мой второй оператор if не работает в моем коде? - PullRequest
0 голосов
/ 19 июня 2019

В настоящее время я работаю над проектом, в котором, если вы нажмете кнопку и скажете что-нибудь, компьютер ответит. Я настроил const, называемый приветствием, и внутри лежат некоторые строки, которые я положил. Затем я помещаю оператор if в мою функцию readOutLoud. В операторе if компьютер проверяет, произносит ли пользователь какое-либо из ключевых слов (сейчас он может ответить только на ваш вопрос), а затем использует Math. Полное случайное число, которое я также вставил в оператор if, чтобы выбрать один из 3 вариантов, которые я добавил в приветствии const. Так что прямо сейчас, если вы нажмете кнопку разговора и скажете, как вы, она ответит одним из 3 вариантов, которые я указал в приветственном констате. Почему-то второе утверждение if, которое я поставил ниже первого, не работает, почему это так? Единственное, что отличается от второго, это то, что он использует разные ключевые слова и получает другое const.

const btn = document.querySelector('.talk');
const content = document.querySelector('.content');
const greetings = [
				'If you are good im good to ?', 
				'Im doin alright', 
				'Im tired ?'
];
const weather = [
				'Ask the weatherman!', 
				'okay I guess' 
				
];
const name = [
	'My name is techwali', 
	'techwali!'
];
const hello = [
	'Why hello! How are you doing today?', 
	'Hey there How are you?'
]
const hru = [
	'thats great!', 
	'Im so sorry to hear that', 
	'Feel better soon!'
]
const SpeechRecognition = 
	window.SpeechRecognition || window.webkitSpeechRecognition;
const recognition = new SpeechRecognition();

recognition.onstart = function() {
	console.log('voice is activated speak into the mic');
};
recognition.onresult = function(event) {
	const current = event.resultIndex;
	
	const transcript = event.results[current][0].transcript;
	content.textContent = transcript;
	readOutLoud(transcript);
}

btn.addEventListener('click', () => {
	recognition.start();
});

function readOutLoud(message) {
	
	const speech = new SpeechSynthesisUtterance();
	speech.text = 'I dont know what you said';
	if(message.includes('how are you')) {
		 const finalText = 
		 greetings[Math.floor(Math.random() * greetings.length)];
		 speech.text = finalText;
		
	} 
	if(message.includes('hey', 'hi', 'hello')) {
		 const finalText = 
		 hello[Math.floor(Math.random() * hello.length)];
		 speech.text = finalText;
		
	} 

	
	speech.volume = 1;
	speech.rate = 1;
	speech.pitch = 1;
	window.speechSynthesis.speak(speech);
		
	} 
	
<!DOCTYPE html>
<html>
<head>
	<title>Page Title</title>
</head>
<body>
<button class="talk">Talk</button>
<h3 class="content"></h3>


</body>

1 Ответ

1 голос
/ 20 июня 2019

Ваш код не работает, потому что метод "include" проверяет, содержит ли массив определенное значение, а не 1 из многих значений.Вы можете сделать это, используя метод "some", например, так.

if(['hey', 'hi', 'hello'].some(word => message.includes(word))) {
    const finalText = hello[Math.floor(Math.random() * hello.length)];
    speech.text = finalText;
}

Это будет выполнять итерацию по массиву, проверяя, содержит ли сообщение какое-либо из указанных значений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...