Javascript 多个阵列,组合成一个,得到平均d3
我有一个函数,它循环遍历json对象并将它们推送到数组中。下面是其中一个对象的示例。每个对象都有完全相同的统计键,当然,值不同。我需要循环遍历所有数组并将统计数据相加,然后将它们除以数组的数量。当然,我可以用一些循环函数来实现这一点……但是因为我使用的是d3,我想我应该试着找出内置的是什么,也就是d3。意思是有没有办法获取所有数组中的所有值并在d3中求平均值Javascript 多个阵列,组合成一个,得到平均d3,javascript,arrays,json,d3.js,Javascript,Arrays,Json,D3.js,我有一个函数,它循环遍历json对象并将它们推送到数组中。下面是其中一个对象的示例。每个对象都有完全相同的统计键,当然,值不同。我需要循环遍历所有数组并将统计数据相加,然后将它们除以数组的数量。当然,我可以用一些循环函数来实现这一点……但是因为我使用的是d3,我想我应该试着找出内置的是什么,也就是d3。意思是有没有办法获取所有数组中的所有值并在d3中求平均值 { "name": "Mr Man", "position": "G", "image":
{
"name": "Mr Man",
"position": "G",
"image": "img/mrman.jpg",
"stats": {
"GP": 35,
"Min": 567,
"Points": 191,
"Rebounds": 46,
"Assists": 72,
"Steals": 18,
"Blocks": 1,
"Turnovers": 37,
"FGAtt": 151,
"FGMade": 63,
"TPtAtt": 55,
"TPMade": 18,
"FTAtt": 47,
"FTMade": 71
}
// doing this works but it's very inefficient...I should be able to loop this
var tempdata = playerArr.slice()
console.log(tempdata + "tempdata")
function meanVal(value) {
return d3.mean(tempdata, function(d) {
return d.stats[value] })
}
var avgArray = {};
avgArray.GP = meanVal('GP');
avgArray.Min = meanVal('Min');
avgArray.FGMade = meanVal('FGMade');
avgArray.FGAtt = meanVal('FGAtt');
avgArray.TPMade = meanVal('TPMade');
avgArray.TPAtt = meanVal('TPAtt');
avgArray.Points = meanVal('Points');
avgArray.Rebounds = meanVal('Rebounds');
avgArray.Assists = meanVal('Assists');
avgArray.Turnovers = meanVal('Turnovers');
avgArray.Steals = meanVal('Steals');
avgArray.Blocks = meanVal('Blocks');
console.log(avgArray.Min + "ar")
像这样的东西不起作用……可能是因为我把重点放在了多个阵列上,而不是一个阵列上:
function returnMean(value) {
return d3.mean(playerArr.stats, function(d) {
return d [value] })
}
var myMean = returnMean('Points');
console.log(myMean)
console.log(playerArr.length) // returns more than 1, say 2 or 3 or 4
在这种情况下,我可能不得不使用拼接:
var tempdata=playerArr.slice
函数返回平均值{
返回d3.meantempdata,函数d{
返回d.stats[value]}
}听起来你需要的是d.stats[value],而不是d[value]。问题是,正如你所看到的,我的stats“array”实际上是一个对象……playerArr.stats,functiond{return d.stats[value]}不起作用……playerArr,functiond{return d.stats[value]}我想我可能已经解决了这个问题?我必须使用splice:var tempdata=playerArr.slice