2016-11-04 3 views
1

Как найти сумму чисел, введенных пользователем в numbersBox? Если пользователь ввел «5, 3, 6, 1» в numbersBox, я должен получить ответ «15» в sumBox после нажатия кнопки «Найти сумму». Я не могу понять, как добавить все элементы массива и что я должен помещать в цикл for.Как найти сумму массивов, введенную пользователем?

function findSUM(){ 
    list = numbersBox.value.split(","); 

    var sum = list[0]; 
    for(var i = 0; i < list.length; i++){ 
     list[i] = parseInt(list[i]); 

     if(list[i] < i){ 
      max += list[i]; 
     } 
    } 
    sumBox.value = sum; 
} 

<label>Write numbers separated by commas:</label> 
<br><br> 
<input type="text" id="numbersBox" /> 

<label>Sum of all numbers:</label> 

<input type="text" id="sumBox" /> 

<button type="button" onclick="findSUM();">Find Sum</button> 

Спасибо. Я буду очень благодарен за вашу помощь.

+0

Если его о поиске сумму, вы можете объяснить, почему у вас это: 'если (список [я] <я) {' – Rajesh

ответ

1

Вы должны преобразуют все элементы массива в Number здесь Array.prototype.map() может быть использован. Итерация должна начинаться со второго индекса, так как переменная sum инициализируется значением, если номер первого индекса.

function findSUM() { 
 
    //Create a list of Numbers 
 
    var list = document.getElementById('numbersBox').value 
 
    .split(",") 
 
    .map(function(x) { 
 
     return isNaN(x) ? 0 : Number(x); 
 
    }); 
 

 
    //Init with first no 
 
    var sum = list[0]; 
 

 
    //Iteration starts wit 2nd element 
 
    for (var i = 1; i < list.length; i++) { 
 
    sum += list[i]; 
 
    } 
 
    document.getElementById('sumBox').value = sum; 
 
}
<label>Write numbers separated by commas:</label> 
 
<br> 
 
<br> 
 
<input type="text" id="numbersBox" /> 
 
<label>Sum of all numbers:</label> 
 
<input type="text" id="sumBox" /> 
 
<button type="button" onclick="findSUM();">Find Sum</button>

+0

'1,2, three' =>' NaN' – Ultimater

+0

Примечание: здесь 'sumBox.value' работает, потому что , sumbox - это идентификатор входа. Это плохая практика. Вы должны выбрать элемент – Rajesh

+0

Не могли бы вы объяснить мне, для чего предназначен '.map (Number)'? Спасибо. – Dianna

1

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

function findSUM(){ 
 
    list = numbersBox.value.split(","); 
 
    console.log(list); 
 
    var sum = 0; 
 
    for(var i = 0; i < list.length; i++){ 
 
     sum += !isNaN(list[i]) ? +list[i] : 0 ; // here '+' would cast the string to number 
 
    } 
 
    sumBox.value = sum; 
 
}
<label>Write numbers separated by commas:</label> 
 
<br><br> 
 
<input type="text" id="numbersBox" /> 
 

 
<label>Sum of all numbers:</label> 
 

 
<input type="text" id="sumBox" /> 
 

 
<button type="button" onclick="findSUM();">Find Sum</button>

+2

Можно также проверить 'NaN' перед добавлением , 'sum + =! isNaN (список [i])?+ list [i]: 0' – Rajesh

+0

спасибо @Rajesh, за указание, что –

+0

Хорошее использование ведущего '+' – Ultimater

1

Используйте этот код ..

list = [12,56,9]; 
var Total = list.reduce(function(a,b){ 
    return a+b; 
}); 
+1

Не забудьте преобразовать в числа ... – Ultimater

1

Чтобы найти сумму чисел в введенном вводе пользователя т.е. "5, 3, 6, 1", вы можете разделить строку на , и использование функцию map, чтобы преобразовать полученный массив строк в целочисленный массив, а затем использовать функцию reduce для вычисления суммы чисел в целых числах array, используя простую функцию, которая добавляет два операнда.

function findSum() { 
 
    var element = document.getElementById('numbersBox'); 
 
    var sumBox = document.getElementById('sumBox'); 
 
    var numbers = processInput(element.value); 
 
    var sum = getSum(numbers); 
 
    sumBox.value = sum; 
 
} 
 

 
function processInput(input) { 
 
    if (typeof input === 'string' || input instanceof String) { 
 
    return input.split(',').map(function(currentValue, index, arr) { 
 
     return !isNaN(currentValue) && currentValue.length ? parseInt(currentValue) : 0; 
 
    }); 
 
    } 
 
} 
 

 
function getSum(numbers) { 
 
    var sum = 0; 
 

 
    if (numbers instanceof Array) { 
 
    sum = numbers.reduce(add); 
 
    // sum = numbers.reduce((a, b) => a + b, 0); // ES 2015 
 
    } 
 

 
    function add(a, b) { 
 
    return a + b 
 
    } 
 

 
    return sum; 
 
}
<label>Write numbers separated by commas:</label> 
 
<br> 
 
<br> 
 
<input type="text" id="numbersBox" /> 
 

 
<label>Sum of all numbers:</label> 
 

 
<input type="text" id="sumBox" /> 
 

 
<button type="button" onclick="findSum();">Find Sum</button>

Приведенный выше код имеет различные функции для обработки/синтаксического анализа данных и для вычисления суммы, приведенные ниже примеры групп, все действия в одной функции вместо разделения обязанностей.

function findSum() { 
 
    var element = document.getElementById('numbersBox'); 
 
    var sumBox = document.getElementById('sumBox'); 
 
    var numbers = element.value.split(','); 
 
    var sum = 0; 
 
    for (var i = 0; i < numbers.length; i++) { 
 
    var number = numbers[i]; 
 
    sum += !isNaN(number) && number.length ? parseInt(number) : 0; 
 
    } 
 

 
    sumBox.value = sum; 
 
}
<label>Write numbers separated by commas:</label> 
 
<br> 
 
<br> 
 
<input type="text" id="numbersBox" /> 
 

 
<label>Sum of all numbers:</label> 
 

 
<input type="text" id="sumBox" /> 
 

 
<button type="button" onclick="findSum();">Find Sum</button>

+0

Если вы уже зацикливаете, чтобы вычислить' sum', зачем вам нужен другой цикл для синтаксического анализа значений int? Оба могут быть объединены – Rajesh

+0

@Rajesh, вы правы, разбор и суммирование могут быть выполнены с использованием одного цикла, например. таким образом ['5', '3', '6', '1']. reduce (function (a, b) {return parseInt (a) + parseInt (b);}); Я просто исключил синтаксический анализ и суммирование в качестве разных обязанностей, чтобы сохранить разделение, когда производительность имеет наибольшее значение и когда дело касается больших данных, они могут быть объединены в один, я думаю. –

+0

Это не плохая практика, но тогда ее разумнее иметь разные функции, такие как 'cleanData' и' processData' или 'getSum'. Таким образом, ваш код будет более читабельным. Но если у вас есть только одна функция, я бы предложил избегать нескольких пивных петель. – Rajesh

0

Try ...

function findSUM(){ 
    list = numbersBox.value.split(","); 
    var sum = parseInt(list[0]); 
    for(var i = 1; i < list.length; i++){ 
     list[i] = parseInt(list[i]); 
     sum += list[i]; 
    } 
    sumBox.value = sum; 
} 
+0

Перед ответом проверьте предыдущие ответы. Я не демотивирую вас, но если ваш ответ очень похож на кого-то другого, он не добавит значение mush. Также вы должны попытаться объяснить вашу попытку. Просто дать рабочий код недостаточно. – Rajesh

0

Хороший чистый раствор, который легко читать и понимать, что подтверждает по пути и поддерживает поплавки, а не только целые числа.

function findSUM() 
 
{ 
 
    var list = document.getElementById("numbersBox").value.split(","); 
 
    var sum = 0; 
 
    for(var i=0;i<list.length;i++) 
 
    if(list[i]&&!isNaN(list[i])) 
 
     sum += parseFloat(list[i]); 
 
    document.getElementById("sumBox").value = sum; 
 
}
<label>Write numbers separated by commas:</label> 
 
<br> 
 
<br> 
 
<input type="text" id="numbersBox" /> 
 
<label>Sum of all numbers:</label> 
 
<input type="text" id="sumBox" /> 
 
<button type="button" onclick="findSUM();">Find Sum</button>

Смежные вопросы