Как создать метод для нахождения суммы массива?

Добрый день!

Вопрос такой: необходимо создать метод:
Array.prototype.sum = function() {}
.
Который бы находил сумму массива. Например:
[1,2,3].sum() -> 6

В чем проблема? Не могу понять, как обратиться к данным массива при написании функции sum.
Я новичок в этом. Уверен, что туплю. Но все же прошу помочь в этом вопросе :-)
  • Вопрос задан
  • 2897 просмотров
Решения вопроса 1
mlnkv
@mlnkv
frontend developer
Учите мат часть ))).
Самый простой способ:
Array.prototype.summary = function(){
  return this.reduce(function(x,y){ return x + y }, 0);
}

но, такое добавление в прототип неправильное, вообще, расширение прототипа встроенных объектов считается дурным тоном (простительно только для новичков),
проблемы возникают при переборе массива циклом for in. На практике желательно использовать просто ф-ции:

function summary(array){
  return array.reduce(function(x,y){ return x + y }, 0);
}


Или, если заморочиться, можно безопастно добавить метод в прототип:
Object.defineProperty(Array.prototype,
  "summary", 
  {
    writable: false,
    enumerable: false,
    configurable: false,
    value: function(o) {
      return this.reduce(function(x,y){ return x + y }, 0);
    }
  }
);
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
Scorpi
@Scorpi
jsfiddle.net/zpryQ/1 вот так будет лучше
Ответ написан
miraage
@miraage
dev
Легко и просто.

Array.prototype.sum = function() {
  var total = 0;
  
  for (var i = 0, len = this.length; i < len; i++) {
    total += this[i];
  }
  
  return total;
};


plnkr.co/edit/I7oqrQMgX6pB1QRFw5X8?p=preview
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы