Массивы с уменьшением и фильтром - PullRequest
1 голос
/ 19 октября 2019

У меня есть вопрос здесь. Я изучаю JavaScript, и я новичок здесь, на StackOverflow. Итак, если у меня есть

Array = [ 7, 5, 6, 1, 3, 7] 

Как я могу показать значения этого массива, превышающие среднее значение этих чисел, используя функции Filter и Reduction? Я сделал это

const values = [5, 6, 10, 4, 3, 7, 1]


function averageValues(v) {
    let sum = 0
    for(let i = 0; i < v.length; i++){
        sum += v[i]
    }
    return sum/v.length
}

const average = averageValues(values)
console.log('Average = ' + average)

console.log(values.filter(function(v){
    return v > average
}))

Ответы [ 4 ]

4 голосов
/ 19 октября 2019

Чтобы использовать сокращение, чтобы найти среднее значение:

const average = values.reduce((acc, cur) => acc + cur) / values.length

Затем вы можете запустить другую функцию:

values.filter(v => v > average)
1 голос
/ 19 октября 2019

Вы можете сделать это:

const values = [5, 6, 10, 4, 3, 7, 1]

const sum = values.reduce((a, b) => {
    return a + b;
}, 0);

const average = sum / values.length + 1

console.log(average)

В этой функции уменьшения у вас есть 2 параметра. Первый a является текущим значением. Второй b аккумулятор.

Функция усреднения с редуктором работает следующим образом:

На первой итерации:

  • аккумулятор (a) равно 0
  • текущее значение (b) равно 5 (первый индекс массива)
  • 5 возвращается

На второй итерации:

  • аккумулятор (а) равен 5 (это результат предыдущей операции)
  • текущее значение (б) равно 6 (второй индекс массива)
  • 11 возвращается (a + b)

И так далее ...

Если вы посмотрите ближе, в конце (после фигурных скобок) вы получитеноль. Это начальное значение, а не обязательство указывать, если вы решите начать отсчет с 0. Но если вы хотите, вы можете указать 8, тогда в первом цикле значение аккумулятора равно 8.

Вв этом случае первая итерация равна:

  • аккумулятор (а) равен 8
  • текущее значение (б) равно 5
  • 13 возвращается

В конце сумма будет равна 44.

0 голосов
/ 19 октября 2019

Можно сделать так:

const arr = [7, 5, 6, 1, 3, 7];
const average = arr.reduce((acc, v) => (acc + v), 0) / arr.length;
console.log(average);

const greaterThan = arr.filter(v => v > average);
console.log(greaterThan);

Надеюсь, это поможет,

0 голосов
/ 19 октября 2019

Поскольку вам нужно использовать .reduce () в этом назначении, я бы сделал следующее:

const values = [5, 6, 10, 4, 3, 7, 1];


function averageValues(v) {
    const reducer = (accumulator, currentValue) => accumulator + currentValue;
    return v.reduce(reducer)/v.length;
}

const average = averageValues(values);
console.log('Average = ' + average);

console.log(values.filter(v => v > average))
...