Как найти сумму массива чисел - PullRequest
618 голосов
/ 05 августа 2009

Учитывая массив [1, 2, 3, 4], как я могу найти сумму его элементов? (В этом случае сумма будет 10.)

Я подумал, $.each может быть полезно, но я не уверен, как это реализовать.

Ответы [ 38 ]

12 голосов
/ 16 июня 2015

Вы также можете использовать ReduRight.

[1,2,3,4,5,6].reduceRight(function(a,b){return a+b;})

, что приводит к выводу как 21.

Ссылка: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/ReduceRight

11 голосов
/ 02 февраля 2015

Кто-нибудь ищет такой функциональный лайнер, как я? Возьми это:

sum= arr.reduce(function (a, b) {return a + b;}, 0);
10 голосов
/ 20 октября 2016

Забавный подход:

eval([1,2,3].join("+"))
9 голосов
/ 01 сентября 2012

Стандартное решение JavaScript:

var addition = [];
addition.push(2);
addition.push(3);

var total = 0;
for (var i = 0; i < addition.length; i++)
{
    total += addition[i];
}
alert(total);          // Just to output an example
/* console.log(total); // Just to output an example with Firebug */

Это работает для меня (результат должен быть 5). Я надеюсь, что в таком решении нет скрытых недостатков.

5 голосов
/ 07 сентября 2016
var totally = eval(arr.join('+'))

Таким образом, вы можете поместить в массив все виды экзотических вещей.

var arr = ['(1/3)','Date.now()','foo','bar()',1,2,3,4]

Я только наполовину шучу.

5 голосов
/ 19 апреля 2016

Я новичок в JavaScript и кодировании в целом, но я обнаружил, что простой и легкий способ суммирования чисел в массиве выглядит так:

    var myNumbers = [1,2,3,4,5]
    var total = 0;
    for(var i = 0; i < myNumbers.length; i++){
        total += myNumbers[i];
    }

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

4 голосов
/ 03 октября 2017

Несколько человек предложили добавить .sum() метод к Array.prototype. Обычно это считается плохой практикой, поэтому я не предлагаю вам это делать.

Если вы все еще настаиваете на этом, то это краткий способ написать:

Array.prototype.sum = function() {return [].reduce.call(this, (a,i) => a+i, 0);}

затем: [1,2].sum(); // 3

Обратите внимание, что функция, добавленная в прототип, использует смесь функций ES5 и ES6 и синтаксиса стрелок. function объявлен, чтобы метод мог получить контекст this от Array, с которым вы работаете. Я использовал => для краткости внутри вызова reduce.

4 голосов
/ 05 января 2018

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

const getSum = arr => (arr.length === 1) ? arr[0] : arr.pop() + getSum(arr);

getSum([1, 2, 3, 4, 5]) //15

По сути, функция принимает массив и проверяет, содержит ли массив ровно один элемент. Если false, он выталкивает последний элемент из стека и возвращает обновленный массив.

Прелесть этого фрагмента в том, что функция включает arr[0] проверку для предотвращения бесконечного зацикливания. Как только он достигает последнего элемента, он возвращает всю сумму.

4 голосов
/ 06 декабря 2014

Небольшой фрагмент кода JavaScript сделает эту работу:

var numbers = [1,2,3,4];
var totalAmount = 0;

for (var x = 0; x < numbers.length; x++) {

    totalAmount += numbers[x];
}

console.log(totalAmount); //10 (1+2+3+4)
3 голосов
/ 14 мая 2018

Вы можете комбинировать метод limit () с лямбда-выражением:

[1, 2, 3, 4].reduce((accumulator, currentValue) => accumulator + currentValue);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...