javascript - 按该字典中的枚举值对字典的角度排序数组
问题描述
我有一些从 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 轴上以正确的月份名称顺序显示在图表中?(不要理会图表,它只显示数组顺序......)
解决方案
将月份映射到值以进行排序
您想要做的是 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])
推荐阅读
- python-3.x - Mathplotlib - 如何在左右两侧绘制 y 轴标签和刻度线
- json - 如何使用 dart 修改 json 文件
- vb.net - MySqlException:列计数与第 1 行的值计数不匹配
- sql-server - 将行号添加到 Microsoft Report Builder 输出
- python - 多线程时 input() 返回 EOF 错误
- javascript - 如果函数花费的时间超过 X 毫秒,则显示加载微调器
- android-studio - 我的应用程序崩溃而在 logcat 中没有显示任何错误
- apache-spark - Pyspark SQL 从组中获取所有最高值并评估是否有欺骗性
- python - 如何使用 gzip 模块打开 csv 文件
- javascript - 这个 JavaScript 问题是否可能没有循环?