Несколько массивов, объединить в один, получить среднее значение d3

#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()