【问题标题】:Arrays with Reduce and Filter使用 Reduce 和 Filter 的数组
【发布时间】:2020-02-15 22:16:47
【问题描述】:

我有一个问题。我正在学习 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
}))

【问题讨论】:

标签: javascript arrays function logic


【解决方案1】:

使用reduce求平均值:

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

然后你可以运行你的其他功能:

values.filter(v => v > average)

【讨论】:

  • 另一种计算 avg const average = values.reduce((avg,value,index) =&gt; avg+(value-avg)/(index+1)) 的方法适用于您没有/不想将数组存储在变量中的情况。
【解决方案2】:

你可以这样做:

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)

在这个 reduce 函数中,您有 2 个参数。第一个 a 是当前值。第二个b累加器。

使用 reduce 的平均函数如下:

第一次迭代:

  • 累加器(a)等于0
  • 当前值 (b) 等于 5(数组的第一个索引)
  • 返回5

在第二次迭代中:

  • 累加器 (a) 等于 5(它是前一个的结果 操作)
  • 当前值 (b) 等于 6(数组的第二个索引)
  • 返回 11 (a + b)

等等……

如果你仔细观察,最后(在大括号之后)你有一个 零。这是初始值,没有义务指定您是否 决定从 0 开始计数。但如果你愿意,你可以指定 8 然后在第一个循环累加器值等于 8。

在这种情况下,第一次迭代等于:

  • 累加器 (a) 等于 8
  • 当前值 (b) 等于 5
  • 返回13

最后总和将等于 44。

【讨论】:

    【解决方案3】:

    由于您需要在此作业中使用 .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))
    

    【讨论】:

      【解决方案4】:

      可以这样做:

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

      希望这会有所帮助,

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-01-22
        • 1970-01-01
        • 2012-02-22
        • 2020-11-25
        • 2017-08-23
        • 2019-06-14
        • 1970-01-01
        相关资源
        最近更新 更多