最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

Is there a JavaScript or jQuery equivalent to Python's "sum" built-in function? - Stack Overflow

programmeradmin1浏览0评论

Say I have an array-ish container of decimal numbers. I want the sum. In Python I would do this:

x = [1.2, 3.4, 5.6]

sum(x)

Is there a similarly concise way to do this in JavaScript?

Say I have an array-ish container of decimal numbers. I want the sum. In Python I would do this:

x = [1.2, 3.4, 5.6]

sum(x)

Is there a similarly concise way to do this in JavaScript?

Share Improve this question edited Aug 20, 2010 at 8:49 Peter Mortensen 31.6k22 gold badges110 silver badges133 bronze badges asked Jul 30, 2010 at 1:48 twnealetwneale 2,9465 gold badges29 silver badges37 bronze badges
Add a comment  | 

2 Answers 2

Reset to default 13

Another approach, a simple iterative function:

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

Yet another approach using Array.prototype.reduce:

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

The reduce method is part of the ECMAScript 5th Edition standard, is widely available, but is not on IE <= 8, however an implementation cay be included from the the Mozilla Dev Center I linked.

I guess there's none... but you can make one on javascript

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

use it as,

[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

demo


Okay as pointed out in the comment, you can also do it as non-recursive way

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;
};

Another way to do it, through function..

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

use it as,

sum([1,2,3,4,5]) //--> returns 15
x = [1.2, 3.4, 5.6]
sum(x); // returns 10.2
发布评论

评论列表(0)

  1. 暂无评论