Существует ли JavaScript или jQuery, эквивалентный встроенной функции “суммы” Python?

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

x = [1.2, 3.4, 5.6]

sum(x)

Существует ли столь же краткий способ сделать это в JavaScript?

9
задан Peter Mortensen 20 August 2010 в 08:49
поделиться

2 ответа

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

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 5th Edition, широко доступна, но отсутствует в IE <= 8, однако реализация может быть включена из связанного мной Центра разработки Mozilla.

12
ответ дан 4 December 2019 в 11:03
поделиться

Думаю, нет ... но вы можете сделать так, чтобы на 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

demo


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

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
7
ответ дан 4 December 2019 в 11:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: