gpt4 book ai didi

JavaScript 对象 - 数组

转载 作者:行者123 更新时间:2023-12-03 10:03:09 25 4
gpt4 key购买 nike

如果我有一个包含年份 Y=[2014, 2011, 2010, 2013, 2014, 2007, 2004]Array,并且如果我想对这些年份进行分组对于 n 并创建像这样的对象(n=3 可以说):

属性名称为min(Y) - (min(Y)+3),属性值:平均值,如(min(Y) + (min(Y)+3))/2).

obj={"2004-2007": "2005.5", "2008-2011":"2009.5", "2012-2015": "2013.5"}

此外,我稍后希望能够获得平均值,因此如果我要求 2009 年,我会得到该元素所属组的值,即 2009.5。

这可能吗?也许有更好的方法?我不在乎对象看起来如何,我只想在我要求时得到我的组平均值。

最佳答案

假设数据列表中是按连续年份分组,而不是按年份分组,即即使没有2016-2019年的数据,仍然有一个分组。

function GroupedAvgData(dataList, groupSize){
//get the min(Y) for a given year
function getMinY(year, minYear){
var gap = year - minYear;
return minYear + gap - gap%groupSize;
}

//build a groups with minY as key and average as value
function buildGrouping(sortedDataList, groupSize){
var currentMin=0, currentSum=0, currentCount=0, groups={};
for(var i=0,len=sortedDataList.length; i<len;i++){
var minY = getMinY(sortedDataList[i], sortedDataList[0]);
if(currentMin != minY){
if(currentCount > 0){
groups[currentMin] = currentSum / currentCount;
}
currentCount = 1;
currentMin = minY;
currentSum = sortedDataList[i];
}else{
currentSum += sortedDataList[i];
currentCount++;
}
if( i == len - 1 && currentCount>0){
groups[currentMin] = currentSum / currentCount;
}
}
return groups;
}
this.sortedList = dataList.sort(function(a,b){return a - b;});
this.groups = buildGrouping(this.sortedList, groupSize);
this.groupSize = groupSize;
}

GroupedAvgData.prototype.getAverageForYear = function(year){
var gap = year - this.sortedList[0];
if(gap >= 0){
var minY = this.sortedList[0] + (gap-gap%this.groupSize);
if(this.groups[minY]){return this.groups[minY];}
}
return 0;
}

要使用它,即查询某一年的平均值:

var Y=[2014, 2011, 2010, 2013, 2014, 2007, 2004];
var myAvg = new GroupedAvgData(Y, 4);
console.log(myAvg.getAverageForYear(2009));

关于JavaScript 对象 - 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30486419/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com