Есть ли JavaScript или jQuery, эквивалентный встроенной функции Python "sum"? - PullRequest
9 голосов
/ 30 июля 2010

Скажем, у меня есть массив массивов десятичных чисел. Я хочу сумму. В Python я бы сделал это:

x = [1.2, 3.4, 5.6]

sum(x)

Есть ли такой же лаконичный способ сделать это в JavaScript?

Ответы [ 3 ]

12 голосов
/ 30 июля 2010

Другой подход, простая итерационная функция:

function sum(arr) {
  var result = 0, n = arr.length || 0; //may use >>> 0 to ensure length is Uint32
  while(n--) {
    result += +arr[n]; // unary operator to ensure ToNumber conversion
  }
  return result;
}

var x = [1.2, 3.4, 5.6];
sum(x); // 10.2

Еще один подход, использующий Array.prototype.reduce:

var arr = [1.2, 3.4, 5.6];
arr.reduce(function (a, b) { return a + b; }, 0); // 10.2

Метод reduce является частьюстандарта ECMAScript 5-е издание, широко доступно, но не в IE <= 8, однако можно добавить ссылку на реализацию из связанного с Mozilla Dev Center I. </p>

7 голосов
/ 30 июля 2010

Я думаю, что нет ни одного ... но вы можете сделать его на javascript

Array.prototype.sum = function() {
  return (! this.length) ? 0 : this.slice(1).sum() +
      ((typeof this[0] == 'number') ? this[0] : 0);
};

использовать его как,

[1,2,3,4,5].sum() //--> returns 15
[1,2,'',3,''].sum() //--> returns 6
[].sum() //--> returns 0    
x = [1.2, 3.4, 5.6]
x.sum(); // returns 10.2

демо


Хорошо, как указано в комментарии, вы также можете сделать это нерекурсивным способом

Array.prototype.sum = function() {
   var num = 0;
   for (var i = 0; i < this.length; i++) {
       num += (typeof this[i] == 'number') ? this[i] : 0;
   }
   return num;
};

Другой способ сделать это, с помощью функции ..

function sum(arr) {
   var num = 0;
   for (var i = 0; i < arr.length; i++) {
       num += (typeof arr[i] == 'number') ? arr[i] : 0;
   }
   return num;
};

используйте это как

sum([1,2,3,4,5]) //--> returns 15
x = [1.2, 3.4, 5.6]
sum(x); // returns 10.2
0 голосов
/ 30 сентября 2017

Я просто хотел бы отметить, что цикл for намного быстрее, чем сокращение:

https://jsperf.com/js-sum-3367890876

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