Сортировка массива в порядке убывания для chart.js столбчатая диаграмма в машинописном виде

#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]