当前位置: 首页 > 知识库问答 >
问题:

平均在JavaScript

符风畔
2023-03-14

然后我需要一个得到平均高点的函数。下面是我做的:

    function getAverageHeight() {
        let total_height = 0;
        let average_height = statues.length;

        if (statues.length > 0) {
            for (let i = 0; i < statues.length; i++) {
                let statue = statues[i];

                total_height += isNaN(statues.height) ? 0 : statue.height;
            }
        average_height = (total_height / statues.length).toFixed(2);
         }
       return average_height;
       } 

但当我测试它时,我得到的回答不是平均值。我做错了什么?有人能提供线索吗?

共有3个答案

詹正浩
2023-03-14

创建一个函数,该函数在每次调用数组时累加数组中的对象。

创建一个单独的平均值函数,如果height是一个数字,该函数将获取该累计数组并返回height的平均结果

let statues = [];
function createStatue(name, city, height) {
  return statues = [...statues, {
    name,
    city,
    height
  }]
}
// call functions to populate array
createStatue("Statue of Liberty", "New York", 46);
createStatue("Christ the Redeemer", "Rio de Janeiro", 30);
createStatue("David", "Florence", 5.17);
createStatue("Little Mermaid", "Copenhagen", 1.25);
createStatue("Winged Victory", "Paris", 2.44);
createStatue("Venus de Milo", "Paris", 2);


function getAverageHeight() {
  const total = statues.reduce((acc, x) => {
    if (!isNaN(x.height)) {
      acc.counter += 1
      acc.sum += x.height;
    }
    return acc;
  }, {
    sum: 0,
    counter: 0
  })
  return (total.sum / total.counter).toFixed(2)

}

console.log(getAverageHeight())
柴琨
2023-03-14

你想用

isNaN(statue.height)

而不是

isNaN(statues.height)
司徒博容
2023-03-14

这里的许多解决方案都非常好,但是也有像true"这样的带有isnan的边缘情况。首先使用parseInt更安全。这里有一个解决方案,它剔除边缘情况并返回平均值。

let statues = [];
function createStatue(name, city, heightInMeters) {
  statues.push({
    name,
    city,
    heightInMeters
  });
}

// create statues + edge cases inputs
createStatue("Number", "New York", 46);
createStatue("Decimal", "Florence", 5.17);
createStatue("String", "Florence", '123');
createStatue("True", "Boston", true);
createStatue("Empty", "New York City", '');


function getAverageHeight() {
  // Filter out bad cases here
  const filteredStatues = statues.filter((x) => {
    let num = parseInt(x.heightInMeters);
    return !isNaN(num);
  });

  const total = filteredStatues.reduce((acc, x) => {
    return acc+parseInt(x.heightInMeters);
  }, 0);
  return (total/filteredStatues.length).toFixed(2);
}

console.log(getAverageHeight());

编辑:操作系统提供了原始代码。看看它,有一些奇怪的地方。

heightInMeters: heightInMeters,
  isLongerThan: function (other_statue) {            
    return this.highInMeters > other_statue.hightInMeters;

看起来这里有几个输入错误,代码不应该运行。

 类似资料:
  • 取一定时间内的平均值 用法 Your browser does not support the video tag. 案例:数据变化趋势 功能:加入平均值和不加平均值的折线图形成对比,显示数字改变的规律 工作原理 结果将会是一段时间段输入的平均值。你可以设置配置项中的时间段长度(工程师叫它采样窗) 提示 短的采样窗意为着输出对输入变化的反应更敏感。

  • 问题内容: 我无法获得熊猫列的平均值或均值。有一个数据框。我在下面尝试的任何事情都没有给我该列的平均值 以下返回几个值,而不是一个: 这样: 问题答案: 如果您只想要列的均值,请选择列(这是一个系列),然后调用:

  • 问题内容: 我正在尝试学习SQL,所以请耐心等待。我正在使用PostgreSQL 9.3 我想根据日期窗口对一列进行平均。我能够编写窗口函数来完成一个集合,但是我希望能够随着不断增长做到这一点。我的意思是: 我假设有一个比对我要平均的每个范围运行查询更好的方法。任何建议表示赞赏。谢谢你。 编辑 我正在尝试创建均匀分布的垃圾箱,以用于汇总表的值。 我的间隔是: 这里是一个表的列 并且 是并列我想表分

  • 我不能得到熊猫的平均值或平均值。有一个数据框。下面我尝试的东西都没有给我列的平均值 以下内容返回多个值,而不是一个值: 这也是:

  • Python是否有一个SciPy函数或NumPy函数或模块来计算给定特定窗口的一维数组的运行平均值?

  • 这是我的第一篇帖子。我正在编写一个程序,从四个输入框中获取输入,求出这四个输入框的总和,并求出平均值。当我这样做的时候,我得到了一个错误,有人能指出我哪里出了错。谢谢