У меня есть этот объект:
const data = {
Jan: [{product: 'Shirt', num: '13'}, {product: 'Shoes', num: '15'}],
Feb: [{product: 'Shirt', num: '22'}, {product: 'Shoes', num: '1'}],
Mar: [{product: 'Shirt', num: '15'}, {product: 'Shoes', num: '25'}]
}
Мне нужно создать еще один объект, который выглядит так:
const data = {
labels: ['Jan', 'Feb', 'Mar'],
datasets: [
{
label: 'Shirt',
data: [13, 22, 15]
},
{
label: 'Shoes',
data: [15, 1, 25]
}
]
}
Объект выше предназначен для диаграммы. Массив данных в массиве наборов данных соответствует каждому значению продукта за месяц.
заранее спасибо
Цвета не имеют значения. я удалю их
labels есть Object.keys(data). Наборы данных сгруппированы. Вы можете найти десятки дубликатов.
Что вы пробовали и что не сработало, как ожидалось? Я полагаю, вы могли бы получить свой labels от ключей в объекте, который у вас есть. И вы можете перебрать имеющиеся у вас данные (возможно, более одного раза), чтобы построить свои datasets и data внутри них.
Да, с метками Object.keys() все в порядке. Я пробовал зацикливаться с for in, но не понимаю, как создавать наборы данных.
Для наборов данных вы можете использовать Объекты группы Javascript по свойству с Object.values(data).flat()



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы можете создать набор данных с помощью Array.prototype.reduce и создать новый массив данных.
Обратите внимание, что вам нужно сгладить массив, так как Object.values(data) дает вам массив массивов.
const data = {
Jan: [{product: 'Shirt', num: '13'}, {product: 'Shoes', num: '15'}],
Feb: [{product: 'Shirt', num: '22'}, {product: 'Shoes', num: '1'}],
Mar: [{product: 'Shirt', num: '15'}, {product: 'Shoes', num: '25'}]
};
// Iterate through the data object's value and flatten this
// For example the Object.values(data) will provide you-
// [[{product: 'shirt', num: '13'}, {product: 'Shoes', num: '15'}], [{product: 'Shirt', num: '22'}, {product: 'Shoes', num: '1'}]] so on and so forth
// Need to make this a linear array using flat(1)
const dataset = Object.values(data).flat(1).reduce((acc, curr) => {
// Check if the product exists on the accumulator or not. If not then create a new
// object for the product.
// For example, this will create - {'Shirt': {label: 'Shirt', data: [13]}}
if (acc[curr.product] === undefined) {
acc[curr.product] = {
label: curr.product,
data: [Number(curr.num)]
}
} else {
// If the product already exists then push the num to the data array
acc[curr.product].data.push(Number(curr.num))
}
return acc;
}, {});
const newData = {
labels: Object.keys(data), // Set the keys as the labels
dataset: Object.values(dataset) // dataset is an object, just extract the values as an array
}
console.info(newData);.as-console-wrapper{ min-height: 100vh!important; top: 0;}Спасибо @Sajeeb. Я потрачу столько времени, сколько мне нужно, чтобы понять это и извлечь из этого уроки.
Я просто написал несколько комментариев, чтобы вы могли легко понять.
Откуда берутся цвета? Где ваши усилия до сих пор?