首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算均值和计算模式

计算均值和计算模式
EN

Stack Overflow用户
提问于 2022-04-19 17:50:24
回答 2查看 195关注 0票数 0

我应该返回给定数组的平均值和模式。但是对于模式,如果有两种模式,那么我需要返回数组中的第一种模式。例如,如果数组为statsFinder(500,400,400,375,300,350,325,300),则输出应为: 368.75,400,因为400发生在300之前的数组中。虽然我相信我接近解决方案,但我无法得到第一次出现的模式。有人知道我如何修正我的代码以获得第一次出现的模式吗?这是我的解决方案:

代码语言:javascript
复制
function statsFinder(array) { 

let length=array.length
let sum=array.reduce((acc,curr)=>{
    return acc+curr
})
let mean=sum/length
let obj=array.reduce((acc,curr)=>{
 acc[curr]=acc[curr] ? acc[curr]+1:1
 if(acc[curr]>acc.max){ 
   acc.max=acc[curr]
 }
  return acc

},{max:1}) 

let mode=0
for(let key in obj){ 
  if (mode[key]===mode.max){ 
    mode=parseInt(key)
    }
    return [mean, mode]
  }
  
}
EN

回答 2

Stack Overflow用户

发布于 2022-04-19 18:10:13

你所做的:

  1. 扫描整个数组,计数每个唯一值的频率。在此过程中,请记住最大count.
  2. Afterwards,扫描值和频率的映射,寻找与最大计数相同的值。

虽然你应该在第二次扫描中修复缩进,这样你就可以知道为什么它不能工作了。你想要这个

代码语言:javascript
复制
  for(let key in obj){ 
    if (mode[key]===mode.max){ 
      mode=parseInt(key)
      return [mean, mode]
    }
  }

或者,更好的是:

代码语言:javascript
复制
  for(let key in obj){ 
    if (mode[key]===mode.max){ 
      mode=parseInt(key)
      break
    }
  }
  return [mean, mode]

请注意,依赖Javascript对象中属性的迭代顺序并不是最佳实践,尽管它可能“大部分时间”都能工作。如果需要按插入顺序迭代,则应该使用Map (如果可能的话)。

但整个扫描都是愚蠢的。在计算频率时,您只需记住与最大计数相关的值:

代码语言:javascript
复制
  acc[curr] = acc[curr] ? acc[curr]+1 : 1
  if (acc[curr] > acc.max) { 
    acc.maxval = curr
    acc.max = acc[curr]
  }

然后您就知道了模式,而不需要再次搜索它,而且您也不需要将值转换回数字。

票数 2
EN

Stack Overflow用户

发布于 2022-08-24 20:52:56

刚遇到同样的挑战,到目前为止,这是我的代码,希望它能帮助你。它只是通过了3/5的测试,所以仍有改进的余地。

代码语言:javascript
复制
function statsFinder(array) {
  // Write your code here
    let sum = array.reduce((partialSum, a) => partialSum + a, 0);
    const mean = sum / array.length;
    let answer = [mean];
  for(let i=0; i<array.length;i++) {
      let current = array[0];
      if(current === array[1]) {
        answer.push(current);
       break;
      } else {
        array.shift();
      }
  }
  return answer;
}

console.log(statsFinder([500, 400, 400, 375, 300, 350, 325, 300]))

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71929223

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档