Хорошо, слушай, вонючий нуб. Вы на 99% пути.
Сначала , мы перефразируем вашу проблему в обобщенный вопрос, чтобы успокоить злых духов, которые преследуют stackoverflow:
У меня есть массив криптоприн. Как мне превратить это в данные, которые chart.js
может использовать?
Это вопрос «сделай мою домашнюю работу», который заставит stackoverflow выдавать синтаксическую ошибку и, возможно, сердитые отрицательные голоса.
Поэтому мы должны разбить его, найти суть вопроса и привести его в порядок.
- Что
chart.js
принимает в качестве данных? - На веб-странице
chart.js
вы можете найти документы, которые написаны довольно хорошо. Поскольку вы хотите построить график зависимости цены от времени, вам нужно точек , что-то вроде [{x:<high price>, y:<time>}]
.
- Какие у вас есть данные?
- По вашему вопросу и фотографии у вас есть что-то вроде:
[{high: 1, time: 2, ... /*etc*/}]
Теперь вы можете задать что-то вроде
Как я могу преобразовать массив объектов одного типа в массив объектов другого типа?
Мне нужно рисовать криптопетки с некоторой библиотекой. Как я могу элегантно преобразовать массив {high: 1, time: 2, ... /*etc*/}
в массив {x:<high price>, y:<time>}
?
Возможны три вещи. Во-первых, вы обнаружите, что кто-то другой уже задавал этот же вопрос, который вы бы не узнали, не сделав сначала этот шаг. Во-вторых, пытаясь найти лучший способ задать вопрос, вы сами нашли ответ (, который вы почти сделали , кстати, хорошая работа). В-третьих, вам все равно нужно его задать, но теперь ваш вопрос довольно симпатичный, и вы привлечете всех фей стека-переполнения, которые теперь будут соревноваться, чтобы ответить на ваш достойный вопрос, даже думал, что это тот же вопрос, что и раньше .
Второй , мы преобразуем массив объектов одного типа в массив объектов другого типа, используя функцию карты
var cryptoprices = [
{high:1, time:1, fields:"that", you:"don't", care:"about"},
{high:9, time:2, otherfields:"that", arein:"theway"}
];
//map is a function that all arrays have.
//It calls a function on each array element, and returns an array with the results of that function.
//So you only need to focus on how you would transform a single cryptoprice into a single point of data:
function transform(cryptoprice) {
//A single point should be an object that contains only the fields x and y.
//Since you are interested in the price and time fields only...
let point = {
x: cryptoprice.time,
y: cryptoprice.high
}
return point;
}
var points = cryptoprices.map(transform)
console.log(points);
// expected output: Array [Object { x: 1, y: 1 }, Object { x: 2, y: 9 }]
И, наконец,, короткая, элегантная версия:
cryptoprices.map(c => ({x:c.time, y:c.high}))
: D