#javascript #arrays #javascript-objects
#javascript #массивы #javascript-объекты
Вопрос:
на сервере я загружаю файл JSON и конвертирую его в массив, затем возвращаю его обратно во внешний интерфейс. Эти данные имеют много слоев, необходимо использовать разные их части для диаграмм Google.
Итак, давайте назовем мою первую диаграмму chartOne. Я могу получить данные, которые мне нужны для этой диаграммы, используя точечную нотацию
console.log(this.chartData.chartOne)
Это выведет что-то вроде следующего, по сути, это массив, содержащий объекты.
(3) [{…}, {…}, {…}]
0:
Category: "cat1"
Count: 11
1:
Category: "cat2"
Count: 14
2:
Category: "cat3"
Count: 21
То, что я пытаюсь сделать, это подготовить эти данные для гистограммы. Google ожидает, что мои данные будут предоставлены в следующем формате
const chartData = [
["cat1", "cat2", "cat3"],
[11, 14, 21]
]
Таким образом, первая строка должна содержать значения для категории, а строка под этим содержит их количество.
Мой вопрос в том, как мне подготовить свои данные в этом формате? Я пытаюсь сделать несколько вещей, но они кажутся чрезмерными, и я немного застрял. Вот где я сейчас нахожусь
Object.keys(this.chartData.chartOne).forEach(key => {
const vmKeys = this.chartData.chartOne[key]
Object.keys(vmKeys).forEach(key => {
console.log(vmKeys vmKeys[key])
})
})
Есть ли лучший способ сделать это, используя что-то вроде map или какую-либо другую функцию ES6?
Спасибо
Ответ №1:
const chartData = {
chartOne: [{
Category: "cat1",
Count: 11
},
{
Category: "cat2",
Count: 14
},
{
Category: "cat3",
Count: 21
}
]
}
const newChartData = chartData.chartOne.reduce((acc, item) => {
acc[0].push(item.Category);
acc[1].push(item.Count);
return acc;
}, [[],[]]);
console.log(newChartData);
Ответ №2:
Вот так:
let chartOne = [
{
Category: "cat1",
Count: 11,
},
{
Category: "cat2",
Count: 14,
},
{
Category: "cat3",
Count: 21,
},
];
let out = [[], []];
for (let x of chartOne) {
let [labels, values] = out;
labels.push(x.Category);
values.push(x.Count);
}
console.log(out);
// prints
=> [ [ 'cat1', 'cat2', 'cat3' ], [ 11, 14, 21 ] ]