筛选基于contractNumber查找平均值的多个对象数组';javascript中的s值

筛选基于contractNumber查找平均值的多个对象数组';javascript中的s值,javascript,jquery,Javascript,Jquery,在数组的多个对象中,每个对象中都有重复的contractNumber数量,但我试图找到其contractNumber的平均值 var vendorArr=[{ "contractNumber":5258, "monthId":0, "value":2}, { "contractNumber":5258, "monthId":2, "value":3 },{ "contract

在数组的多个对象中,每个对象中都有重复的contractNumber数量,但我试图找到其contractNumber的平均值

  var vendorArr=[{
     "contractNumber":5258,
     "monthId":0,
     "value":2},
      {
        "contractNumber":5258,
        "monthId":2,
        "value":3
      },{
        "contractNumber":5258,
        "monthId":3,
        "value":3

     },
     {
     "contractNumber":5656,
     "monthId":0,
     "value":3
     },
     {
    "contractNumber":5656,
    "monthId":1,
    "value":4
     },
     {
    "contractNumber":5656,
    "monthId":2,
    "value":4
    }
     ];
     for(var i=0;i<vendorArr.length;i++){
      }
var vendorArr=[{
“合同编号”:5258,
“蒙希德”:0,
“值”:2},
{
“合同编号”:5258,
“蒙希德”:2,
“价值”:3
},{
“合同编号”:5258,
“蒙希德”:3,
“价值”:3
},
{
“合同编号”:5656,
“蒙希德”:0,
“价值”:3
},
{
“合同编号”:5656,
“蒙希德”:1,
“价值”:4
},
{
“合同编号”:5656,
“蒙希德”:2,
“价值”:4
}
];

对于(var i=0;i您可以使用数组缩减函数对每个
contractNumber
的值求和,并创建一个新的键
count
。以计算平均值除以count

var vendorArr=[{
“合同编号”:5258,
“蒙希德”:0,
“价值”:2
},
{
“合同编号”:5258,
“蒙希德”:2,
“价值”:3
}, {
“合同编号”:5258,
“蒙希德”:3,
“价值”:3
},
{
“合同编号”:5656,
“蒙希德”:0,
“价值”:3
},
{
“合同编号”:5656,
“蒙希德”:1,
“价值”:4
},
{
“合同编号”:5656,
“蒙希德”:2,
“价值”:4
}
];
var m=供应商减少(功能(资源、项目){
如果(!res[item.contractNumber]){
res[项目合同编号]={
值:0,
计数:0
};
};
res[item.contractNumber].value=res[item.contractNumber].value+item.value;
res[item.contractNumber]。计数+=1;
返回res;
}, {});
功能calAvg(合同编号){
返回m[contractNumber]。值/m[contractNumber]。计数
}

log(calAvg(5656))
我将根据合同编号重新索引合同,然后找到合同价值的平均值

const vendorArr=[{contractNumber:5258,monthId:0,value:2},{contractNumber:5258,monthId:2,value:3},{contractNumber:5258,monthId:3,value:3},{contractNumber:5656,monthId:0,value:3},{contractNumber:5656,monthId:1,value:4},{contractNumber:5656,monthId:2,value:4}]
const findAverageContractValue=合同=>{
const contractAverages={}
//按合同编号重新索引合同`
const contractsByNumber=合同。reduce((acc,合同)=>{
if(合同类型[合同编号]=“未定义”){
acc[合同编号]=[]
}
acc[合同号].推送(合同)
返回acc
}, {})
//迭代每种类型的合同
Object.keys(contractsByNumber).forEach(contractId=>{
const contracts=contractsByNumber[contracted]
//将平均值添加到contracts对象
收缩平均数[收缩的]=
契约。减少((acc,x)=>acc+x.value,0)/contracts.length
})
收益率平均值
}
console.log(
findAverageContractValue(卖方)
)

基本上,您需要两步方法,一步是收集平均值的数据,第二步是在带有
contractNumber
和平均值的数组中获得结果

该方案使用一个哈希表,在该哈希表中,数据被收集到一个数组中,对象保留
contractNumber
和平均值。这会在给定数据的每次迭代中得到更新

var data=[{contractNumber:5258,monthId:0,value:2},{contractNumber:5258,monthId:2,value:3},{contractNumber:5258,monthId:3,value:3},{contractNumber:5656,monthId:0,value:3},{contractNumber:5656,monthId:1,value:4},{contractNumber:5656,monthId:2,value:4}],
hash=Object.create(null),
结果=[];
data.forEach({contractNumber,value})=>{
hash[contractNumber]=hash[contractNumber]|{index:result.push({contractNumber,average:0})-1,sum:0,count:0};
散列[contractNumber].sum+=值;
结果[hash[contractNumber]。索引]。平均值=hash[contractNumber]。总和/++哈希[contractNumber]。计数;
});
console.log(结果);

.as控制台包装{最大高度:100%!重要;顶部:0;}
欢迎使用Stack Overflow!您可能会欣赏上的指南以及。m尝试查找每个唯一的contractNumber对象属性值的平均值。.感谢replylike contractNumber为5258,其值为2,下一个对象sane contractNumber,但值不同,因此m查找每个唯一的ccontractNumber对象属性值的平均值
这就是此代码所做的。它将查找每个contractNumber的值,并将查找其值的平均值有三个对象具有相同的contractNumber 5656,其值的总和为11,并且有三个出现的contractNumber 5656,因此11/3是3.66.