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

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

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

Ответы [ 38 ]

3 голосов
/ 23 июня 2017

Использование reduce

let arr = [1, 2, 3, 4];

let sum = arr.reduce((v, i) => (v + i));

console.log(sum);
3 голосов
/ 11 декабря 2017

Не нужно initial value! Потому что, если initial value не передано, callback function не вызывается для первого элемента списка, а первый элемент вместо этого передается как initial value. Очень с ОО л особенность:)

[1, 2, 3, 4].reduce((a, x) => a + x) // 10
[1, 2, 3, 4].reduce((a, x) => a * x) // 24
[1, 2, 3, 4].reduce((a, x) => Math.max(a, x)) // 4
[1, 2, 3, 4].reduce((a, x) => Math.min(a, x)) // 1
2 голосов
/ 28 февраля 2018

я видел, что все ответы идут на решение «уменьшить»

var array = [1,2,3,4]
var total = 0
for (var i = 0; i < array.length; i++) {
    total += array[i]
}
console.log(total)
2 голосов
/ 22 апреля 2015

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

function arraySum(array){
  var total = 0,
      len = array.length;

  for (var i = 0; i < len; i++){
    total += array[i];
  }

  return total;
};

var my_array = [1,2,3,4];

// Returns 10
console.log( arraySum( my_array ) );

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

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

Вот ссылка CodePen для этой функции arraySum. http://codepen.io/brandonbrule/pen/ZGEJyV

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

2 голосов
/ 19 февраля 2017

Это действительно отличные ответы, но на всякий случай, если числа в последовательности, как в вопросе (1,2,3,4), вы можете легко сделать это, применив формулу (n * (n + 1)) / 2, где n - последнее число

2 голосов
/ 20 марта 2017
Object.defineProperty(Object.prototype, 'sum', {
    enumerable:false,
    value:function() {
        var t=0;for(var i in this)
            if (!isNaN(this[i]))
                t+=this[i];
        return t;
    }
});

[20,25,27.1].sum()                 // 72.1
[10,"forty-two",23].sum()          // 33
[Math.PI,0,-1,1].sum()             // 3.141592653589793
[Math.PI,Math.E,-1000000000].sum() // -999999994.1401255

o = {a:1,b:31,c:"roffelz",someOtherProperty:21.52}
console.log(o.sum());              // 53.519999999999996
2 голосов
/ 05 августа 2017

Это намного проще

function sumArray(arr) {
    var total = 0;
    arr.forEach(function(element){
        total += element;
    })
    return total;
}

var sum = sumArray([1,2,3,4])

console.log(sum)
1 голос
/ 20 января 2018

Эта функция может суммировать все числа -

 function array(arr){
   var sum = 0;
   for (var i = 0; i< arr.length; i++){
    sum += arr[i];
   }
   console.log(sum);
 }
 array([5, 1, 3, 3])
1 голос
/ 21 сентября 2017

Ванильный JavaScript - это все, что вам нужно:

> a = [1,2,3,4]; a.foo = 5; a['bar'] = 6; sum = 0; a.forEach(function(e){sum += e}); sum
10
> a = [1,2,3,4]; a.foo = 5; a['bar'] = 6; sum = 0; a.forEach(e => sum += e); sum
10
> a = [1,2,3,4]; a.foo = 5; a['bar'] = 6; sum = 0; for(e in a) sum += e; sum
"00123foobar"
> a = [1,2,3,4]; a.foo = 5; a['bar'] = 6; sum = 0; for(e of a) sum += e; sum
10
1 голос
/ 30 июня 2017

попробуйте это ...

function arrSum(arr){
    total = 0;  
    arr.forEach(function(key){
        total = total + key;            
    });
    return total;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...