#javascript #arrays #json #d3.js
#javascript #массивы #json #d3.js
Вопрос:
У меня есть функция, которая перебирает мои объекты json и помещает их в массив. Вот пример одного из объектов. Каждый объект будет иметь одинаковые ключи для статистики — но, конечно, разные значения. Мне нужно перебрать все массивы и сложить статистику, а затем разделить их на количество массивов. Конечно, я мог бы сделать это с помощью нескольких функций цикла …. но поскольку я использую d3, я решил, что попробую выяснить, что встроено, а именно d3. mean() . Есть ли способ захватить все значения во всех массивах и усреднить их в d3?
{
"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
Возможно, в этом случае мне пришлось использовать splice:
функция var tempdata = playerArr.slice()
возвращает значение (значение) {
вернуть d3.mean(tempdata, function(d) {
вернуть d.статистика[значение] })
}
Комментарии:
1. Похоже, вам нужно
d.stats[value]
, а неd[value]
нужно.2. Проблема в том, что моя статистика ‘array’ на самом деле является объектом, как вы можете видеть… playerArr.stats,функция (d){ возвращает d.stats [значение] }) не работает …. также не работает playerArr, функция (d) {возвращает d.stats[значение] })
3. Я думаю, что, возможно, я решил это? Мне пришлось использовать splice: var tempdata = playerArr.slice()