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