#javascript #typescript
#javascript #typescript
Вопрос:
Я пытаюсь отсортировать данные для гистограммы в chart.js . Я совершенно новичок в javascript / typescript и уже пробовал function.sort(), но, к сожалению, это не сработало. Кто-нибудь знает, как это сделать?
Я в основном хочу отсортировать метки по убыванию в соответствии с соответствующими значениями.
Например.:
метки: [C, D,A,B]
data1: [10,5,3,1]
const labels: string[] = [];
const data1: string[] = [];
if (this.reportData amp;amp; this.reportData['objects']) {
this.reportData['objects'].forEach(obj => {
labels.push(obj.name);
let count = 0;
if (obj.scans) {
count = obj.scans.length;
}
data1.push(count as any);
});
}
Ответ №1:
Вот мое решение. Сначала мы создаем новый массив, элементами которого являются объекты, объединяющие метку и данные для каждого значения. Затем мы сортируем этот массив по данным и, наконец, снова создаем отдельные массивы:
const labels: string[] = ['C','D','A','B'];
const data1: number[] = [10, 5, 3, 1];
// Construct and array of objects that have 'label' and 'data'
// We expect that labels and data1 are the same length but if there is
// a chance that they are not, you should check for that.
const allData = [];
for (let i = 0; i < labels.length; i) {
allData.push({
label: labels[i],
data: data1[i]
});
}
// Sort them by the data value
allData.sort((a, b) => a.data - b.data);
// And split them again
const sortedLabels = allData.map(e => e.label);
const sortedData = allData.map(e => e.data);
console.log(sortedLabels); // ["B", "A", "D", "C"]
console.log(sortedData); // [1, 3, 5, 10]