首页 > 解决方案 > 按该字典中的枚举值对字典的角度排序数组

问题描述

我有一些从 http 服务调用的数据。该数据包含月份名称,它们被定义为自然日历顺序中的枚举对象......我现在有一个数组,我将月份名称与一些额外的整数一起推送到一个字典中。例如:

[{name:Februar, value: 999},{name: Januar, value: 123}, {name: Oktober, value: 321},...]

然后我将字典推入数组。现在,我想通过字典枚举条目对数组进行排序......所以一月首先出现,然后是二月......等等:

[{name: Januar, value: 123},{name:Februar, value: 999}, {name: Oktober, value: 321},...]

我的代码如下所示:

import { Component, OnInit, NgModule } from '@angular/core';
import {Http,Response} from '@angular/http';
import 'rxjs/add/operator/map';
import { BrowserModule } from '@angular/platform-browser';
import { NgxChartsModule } from '@swimlane/ngx-charts';

@Component({
  selector: 'productsbydemomonth',
  templateUrl: './productsbydemomonth.component.html',
  styleUrls: ['./productsbydemomonth.component.scss']
})
export class ProductsbydemomonthComponent implements OnInit {

  dataArray : any[];
  Anzahl: number[] = [];
  Monat: Monat;
  chartData: any = [];

  view: any[] = [700, 400];

  // options
  showXAxis = true;
  showYAxis = true;
  gradient = false;
  showLegend = true;
  showXAxisLabel = true;
  xAxisLabel = 'Monat';
  showYAxisLabel = true;
  yAxisLabel = 'Anzahl';


  monatConst: number = 12;

  colorScheme = {
    domain: ['#5AA454', '#A10A28', '#C7B42C', '#AAAAAA']
  };
  monthArray: Monat[] = [Monat.Januar, Monat.Februar, Monat.Maerz, Monat.April, Monat.Mai, Monat.Juni, Monat.Juli, Monat.August, Monat.September, Monat.Oktober, Monat.November,Monat.Dezember ]

  constructor(private http: Http) { }

  ngOnInit() {
    //this.getChartsData();
  }

  getChartsData() {
    return this.http.get('http://localhost:5555/DNZ/Produkt/Monat/by/' + (this.monatConst))
    .subscribe((res: Response) => {
      this.chartData = res.json() ;
      this.dataArray = this.formatData(this.chartData);       
    },
    (err) => {
      if (err.error instanceof Error) {
        console.log('Client-side error occured.');
      } else {
        console.log('Server-side error occured.');
      }
    });
  }

  formatData(someData) {
    this.dataArray = [];

    for (let dat of someData) {
      var dictChart = {
        name: dat.Monat,
        value: dat.Anzahl,      
      };
      //console.log(dictChart);
      this.dataArray.push(dictChart);
    }
    //console.log("Im Array:", this.dataArray);
    this.dataArray.sort(name);
    return this.dataArray;
  }

}


interface chartData {
  Anzahl : number,
  DemoID : number,
  Monat: Monat
}

enum Monat {"Januar","Februar","Maerz","April","Mai","Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"}

如何按月份名称对字典数组中的这些数据进行排序?以便它们在 x 轴上以正确的月份名称顺序显示在图表中?(不要理会图表,它只显示数组顺序......)

标签: javascriptangularsortingdictionaryenums

解决方案


将月份映射到值以进行排序

您想要做的是 use .sort,但 sort 使用值来上下排序,因此,您必须将每个月映射到如下值:

const months = {
	January: 0,
	February: 1,
	March: 2,
	April: 3
}

let yourObject = [{month:'April'},{month:'January'},{month:'March'}]

console.log(yourObject.sort((data, prev) => months[data.month] - months[prev.month]))

.sort((data, prev) => months[data.month] - months[prev.month])


推荐阅读