Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/472.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用对象键作为日期以获取值的平均值_Javascript_Json_Object - Fatal编程技术网

Javascript 使用对象键作为日期以获取值的平均值

Javascript 使用对象键作为日期以获取值的平均值,javascript,json,object,Javascript,Json,Object,我有一件像这样的东西。它们的键是一个时间戳,值是我的号码 var history = { '1505845390000': 295426, '1505757979000': 4115911, '1505677767000': 4033384, '1505675472000': 4033384, '1505591090000': 3943956, '1505502071000': 3848963, '1505499910000'

我有一件像这样的东西。它们的键是一个时间戳,值是我的号码

var history = {
     '1505845390000': 295426,
     '1505757979000': 4115911,
     '1505677767000': 4033384,
     '1505675472000': 4033384,
     '1505591090000': 3943956,
     '1505502071000': 3848963,
     '1505499910000': 3848963,
     '1505499894000': 3848963
}
我想做的是:

1) 对于最近的5个日期(键),获取值的平均值
2) 对于日期范围,获取值的平均值

此答案很好地解释了如何根据对象的键过滤对象:

基本上使用
Object.keys()
来获得一个键数组,然后使用
array.filter()
来选择所需的键,然后使用
array.reduce()
来使用过滤键的相关值重建对象。像这样:

Object.keys( history )
   .filter( someFilterFunction )
   .reduce( (obj, key) => {
      obj[key] = history[key];
   }, {});
完成此操作后,可以使用
Object.values()
提取剩余值,然后将其传递给一个简单的平均值函数(我假设您想要平均值):


对于第一种情况,您可以执行以下操作

var obj={
'1505845390000': 295426,
'1505757979000': 4115911,
'1505677767000': 4033384,
'1505675472000': 4033384,
'1505591090000': 3943956,
'1505502071000': 3848963,
'1505499910000': 3848963,
'1505499894000': 3848963
}
设ans=Object.keys(obj.sort();
ans=ans.slice(ans.length-5)。reduce((a,b)=>a+obj[b],0);

控制台日志(ans/5)你自己解决过吗?仔细想想需要做什么。您需要一种方法来迭代对象中的每个键。研究对象。键或用于…in.Ahh!我一直在试着把它转换成日期,然后订购。它从来没有想到只是排序它第一!如何调整第二个选项,即在开始和结束之间进行过滤,但仅当值大于0时才进行过滤。我有一个问题,如果我有许多键/值,其中的值为0,那么平均值会受到影响,因此需要忽略0's。过滤器中的该条件。我不认为这是可能的,因为您只能访问键而不能访问值。如果您知道该键,obj[key]会给您该值
function meanAverage( valuesToAverage ) {
    //avoid divide by zero
    if ( valuesToAverage.length ) {
       const valueSum = sum( valuesToAverage );
       return valueSum / valuesToAverage.length;
    }
    return 0;
}

function sum( valuesToSum ) {
   return valuesToSum.reduce( (a, b) => a + b );
}