изменение формы данных d3: свойства к массиву - PullRequest
0 голосов
/ 15 мая 2018

У меня есть некоторые данные в этом формате:

{
    seriesOne: [
        [1, 42.3],
        [2, 12.9]
    ],
    seriesTwo: [
        [1, 23.1],
        [2, 10.6]
    ]
}

Но я смотрю на D3 пример , где данные в конечном итоге находятся в этом формате:

[{
        id: "seriesOne",
        values: [{
                x: 1,
                y: 42.3
            },
            {
                x: 2,
                y: 12.9
            }
        ]
    },
    {
        id: "seriesTwo",
        values: [{
                x: 1,
                y: 23.1
            },
            {
                x: 2,
                y: 10.6
            }
        ]
    }
]

Можно ли нарисовать диаграмму с этим как есть?В качестве альтернативы, есть ли способ D3 изменить мои данные?

Я могу изменить это с простым старым JS, но это кажется неэффективным.

var reshapedData = [];
Object.keys(originalData).forEach(function (key) {
   currentSeries = {id: key, values: []};
   originalData[key].forEach(function (value) {
      currentSeries['values'].push({x: value[0], y: value[1]});
   });
   reshapedData.push(currentSeries);
});

1 Ответ

0 голосов
/ 15 мая 2018

Вы можете использовать метод reduce() и метод map() внутри для создания values массива объектов.

const data = {"seriesOne":[[1,42.3],[2,12.9]],"seriesTwo":[[1,23.1],[2,10.6]]}
const result = Object.keys(data).reduce((r, id) => {
  r.push({id, values: data[id].map(([x, y]) => ({x, y}))})
  return r;
}, [])

console.log(result)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...