Среднее с методом уменьшения в JavaScript - PullRequest
0 голосов
/ 02 сентября 2018

недавно я пытался вычислить Среднее с помощью метода Reduce. В JavaScript здесь может быть код

var arr = [129, 139, 155, 176];

var result = arr.reduce(function (start, end, index, array){
  var total =start + end;
  var array_length = array.length;
  return total/array_length;
});
console.log(result);

мой результат 57,875, но это неправильно, где моя проблема и как ее решить?

Ответы [ 3 ]

0 голосов
/ 02 сентября 2018

То, что вы называете start в вашем коде, фактически является тем, что возвращается из предыдущей итерации. На каждом шаге вы добавляете текущий элемент массива (вы назвали его end) к тому, что было возвращено на предыдущей итерации (start), и делите сумму на длину массива. Это действительно не в среднем.

Вот как вы можете вычислить среднее значение с помощью редуктора:

const arr = [129, 139, 155, 176];

// sum all the elements of the array
const sum = arr.reduce(function (accumulator, currentValue){
  return accumulator + currentValue;
});

const average = sum / arr.length;

console.log(average);
0 голосов
/ 03 сентября 2018

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

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

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

См. Код и надеюсь, что поможет с вашим ответом. Удачного кодирования:)

     var arr = [129, 139, 155, 176];
    
    function reducer(acc, value, index, array) {
    
      var calculatedValue = acc + value;
    
      if (index === array.length - 1) {
        return calculatedValue / array.length;
      }
    
      return calculatedValue;
    }
    
    var result = arr.reduce(reducer, 0);
    
    console.log(result);
0 голосов
/ 02 сентября 2018

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

var array = [129, 139, 155, 176],
    average = array.reduce(function (avg, value, _, { length }) {
        return avg + value / length;
    }, 0);

console.log(average);

Или взять сумму всех значений и разделить на длину массива. Результат тот же.

var array = [129, 139, 155, 176],
    average = array.reduce(function (sum, value) {
        return sum + value;
    }, 0) / array.length;

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