JavaScript

JavaScript Как сделать решение математических задач с несколькими числами?

Мне нужно сделать так, чтобы я мог складывать сразу несколько чисел, а не только «1+1».
Вопрос в том, что нужно дописать в коде, чтобы я мог складывать сразу «1+1+1» три числа или больше чисел и получать правильный ответ?
Сейчас если я пишу в поле для ввода «1+1+1» в результате я получаю «2», но это неправильно, должен быть ответ «3».
Не читается следующий знак «+». Как сделать чтобы он читался?

   









ОТПРАВИТЬ




var chatbox = document.getElementById("chatbox");
var messageInput = document.getElementById("messageInput");
var sendButton = document.getElementById("sendButton");

//КНОПКА
sendButton.addEventListener("click", function () {
sendMessage();
});

//ENTER
messageInput.addEventListener("keyup", function (event) {
if (event.keyCode === 13) {
event.preventDefault();
sendMessage();
}
});
//-------------
//ЗАПРОС
function sendMessage() {
var message = messageInput.value.trim();

if (message !== "") {
addMessage("Запрос", message);
messageInput.value = "";

if (message.toLowerCase().includes("+")) {
var numbers = message.split("+");
var result = parseInt(numbers[0]) + parseInt(numbers[1]);
addMessage("Результат", result);
}
}
}

//ИМЯ ДЕЙСТВИЯ
function addMessage(name, message, className) {
var messageElement = document.createElement("div");
messageElement.innerHTML = "" + name + ": " + message;
chatbox.appendChild(messageElement);
chatbox.scrollTop = chatbox.scrollHeight;
}


Чтобы решить эту проблему, вы можете изменить код в функции sendMessage(). Вместо того, чтобы складывать только первые два числа, вы можете использовать цикл для сложения всех чисел. Вот как это можно сделать:
 function sendMessage() {  
var message = messageInput.value.trim();

if (message !== "") {
addMessage("Запрос", message);
messageInput.value = "";

if (message.toLowerCase().includes("+")) {
var numbers = message.split("+");
var result = 0;
for (var i = 0; i < numbers.length; i++) {
result += parseInt(numbers[i]);
}
addMessage("Результат", result);
}
}
}
Теперь, если вы введете «1+1+1» в поле для ввода и нажмете кнопку отправки или клавишу Enter, вы увидите правильный результат «3».
Eugene Eugene
Eugene Eugene
25 860
Лучший ответ
Александр Гольцев Работает, но только для «+». Как это сделать для остальных знаков «-», «*» и «/»?
«1+1-1» не работает. «1-1-1» не работает, с умножением и делением также.
Почему устаревший var, а не современный let?
Нейросеть не понимает, что строку надо преобразовать в число. Правильно:
 let result = message.split('+').reduce((a, b) => a + parseInt(b), 0); 
Переменная numbers не нужна.
Чтобы добавить поддержку сложения нескольких чисел, вам нужно изменить функцию `sendMessage()`. Вместо того, чтобы использовать `parseInt()` для преобразования каждого числа в массиве `numbers` в целое число, вы можете использовать функцию `Array.reduce()`, чтобы сложить все числа вместе. Функция `Array.reduce()` принимает два аргумента: начальное значение и функцию. Начальное значение будет использовано для инициализации суммы, а функция будет использоваться для сложения текущего значения с каждым элементом массива. В вашем случае начальное значение будет равно 0, а функция будет складывать текущие значения.

Вот измененный код функции `sendMessage()`:

```
function sendMessage() {
var message = messageInput.value.trim();

if (message !== "") {
addMessage("Запрос", message);
messageInput.value = "";

if (message.toLowerCase().includes("+")) {
var numbers = message.split("+");
var result = numbers.reduce((a, b) => a + b, 0);
addMessage("Результат", result);
}
}
}
```

Этот код будет работать так же, как и старый код, но он будет поддерживать сложение нескольких чисел. Например, если вы введете `1+2+3`, функция `sendMessage()` будет возвращать `6`.
Артем Косов
Артем Косов
14 368
Александр Гольцев Я заменил, но теперь 1+1=011, а 1+1+1=0111, теперь вообще не считает почему то.
Если не заморачиваться, можно eval использовать
Sergo !!!-!!!
Sergo !!!-!!!
6 773