如何在显示之前映射接收到的数据?
How do I map received data before they get displayed?
我想知道如何解决以下问题:
我正在为网格布局使用 Syncfusion。如文档中所述,我将接收到的数据存储在名为 datasource.ts 的外部文件中:
//component.ts
//getting data from server
ngOnInit() {
this.user.someFunction().subscribe(data => {
this.datasource.data = data;
})
}
在我的 html 文件中,我使用该数据构建网格:
<ej-grid id="Grid" #grid [dataSource]="datasource.data" allowPaging="true"
allowFiltering="true"
selectionType="single" allowSelection="true"
[selectionSettings]="selectionMode" (rowSelected)="rowSelected($event)"
(recordDoubleClick)="Doubleclick($event)">
<e-columns>
<e-column field="digit" headerText="Digits"></e-column>
</e-columns>
</ej-grid>
到目前为止一切顺利。
我想映射我收到的数字(由于类型数字)并将其替换为相关字符串,例如:
1 - "One",
2- "Two",
这样显示的是字符串而不是接收到的数字,但好像不是字。
我必须在通话中更改一些内容:
// in service
someFunction(): Observable<Data[]>{
return this.http.get<Data[]>(url).pipe(
map((data: any[]) => data.map(order => this.orderadapter.adapt(data)
)));
}
但我不知道如何在那里放置另一个映射。
任何人都可以帮助一些(虚拟)代码吗?也许我的问题还有其他解决方案?
只是一个简单的例子,数字上有 switch case:1、2
this.user.someFunction().subscribe(data => {
this.datasource.data = data.map(digit => this.transform(digit));
})
transform(digit: number): string {
switch (digit) {
case 1: return 'One';
break;
case 2: return 'Two';
break;
default: return 'Not one or two';
}
}
这是map docu
Edit: Map when you want to keep your object and just want to transform some attributes
this.user.someFunction().subscribe(data => {
this.datasource.data = data.map(data => data.digit = this.transform(data.digit));
})
...
您可以尝试创建一个将数字转换为单词的函数,例如
inWords (num) {
var a = ['','one ','two ','three ','four ', 'five ','six ','seven ','eight ','nine ','ten ','eleven ','twelve ','thirteen ','fourteen ','fifteen ','sixteen ','seventeen ','eighteen ','nineteen '];
var b = ['', '', 'twenty','thirty','forty','fifty', 'sixty','seventy','eighty','ninety'];
if ((num = num.toString()).length > 9) return 'overflow';
n = ('000000000' + num).substr(-9).match(/^(\d{2})(\d{2})(\d{2})(\d{1})(\d{2})$/);
if (!n) return; var str = '';
str += (n[1] != 0) ? (a[Number(n[1])] || b[n[1][0]] + ' ' + a[n[1][1]]) + 'crore ' : '';
str += (n[2] != 0) ? (a[Number(n[2])] || b[n[2][0]] + ' ' + a[n[2][1]]) + 'lakh ' : '';
str += (n[3] != 0) ? (a[Number(n[3])] || b[n[3][0]] + ' ' + a[n[3][1]]) + 'thousand ' : '';
str += (n[4] != 0) ? (a[Number(n[4])] || b[n[4][0]] + ' ' + a[n[4][1]]) + 'hundred ' : '';
str += (n[5] != 0) ? ((str != '') ? 'and ' : '') + (a[Number(n[5])] || b[n[5][0]] + ' ' + a[n[5][1]]) + 'only ' : '';
return str;
}
然后
return this.http.get<Data[]>(url).pipe(
map((data: any[]) => {
return data.map(d=>{
return {
this.inWords(yourdigitkey)//
}
})
}
)))
我想知道如何解决以下问题:
我正在为网格布局使用 Syncfusion。如文档中所述,我将接收到的数据存储在名为 datasource.ts 的外部文件中:
//component.ts
//getting data from server
ngOnInit() {
this.user.someFunction().subscribe(data => {
this.datasource.data = data;
})
}
在我的 html 文件中,我使用该数据构建网格:
<ej-grid id="Grid" #grid [dataSource]="datasource.data" allowPaging="true"
allowFiltering="true"
selectionType="single" allowSelection="true"
[selectionSettings]="selectionMode" (rowSelected)="rowSelected($event)"
(recordDoubleClick)="Doubleclick($event)">
<e-columns>
<e-column field="digit" headerText="Digits"></e-column>
</e-columns>
</ej-grid>
到目前为止一切顺利。 我想映射我收到的数字(由于类型数字)并将其替换为相关字符串,例如:
1 - "One", 2- "Two",
这样显示的是字符串而不是接收到的数字,但好像不是字。 我必须在通话中更改一些内容:
// in service
someFunction(): Observable<Data[]>{
return this.http.get<Data[]>(url).pipe(
map((data: any[]) => data.map(order => this.orderadapter.adapt(data)
)));
}
但我不知道如何在那里放置另一个映射。 任何人都可以帮助一些(虚拟)代码吗?也许我的问题还有其他解决方案?
只是一个简单的例子,数字上有 switch case:1、2
this.user.someFunction().subscribe(data => {
this.datasource.data = data.map(digit => this.transform(digit));
})
transform(digit: number): string {
switch (digit) {
case 1: return 'One';
break;
case 2: return 'Two';
break;
default: return 'Not one or two';
}
}
这是map docu
Edit: Map when you want to keep your object and just want to transform some attributes
this.user.someFunction().subscribe(data => {
this.datasource.data = data.map(data => data.digit = this.transform(data.digit));
})
...
您可以尝试创建一个将数字转换为单词的函数,例如
inWords (num) {
var a = ['','one ','two ','three ','four ', 'five ','six ','seven ','eight ','nine ','ten ','eleven ','twelve ','thirteen ','fourteen ','fifteen ','sixteen ','seventeen ','eighteen ','nineteen '];
var b = ['', '', 'twenty','thirty','forty','fifty', 'sixty','seventy','eighty','ninety'];
if ((num = num.toString()).length > 9) return 'overflow';
n = ('000000000' + num).substr(-9).match(/^(\d{2})(\d{2})(\d{2})(\d{1})(\d{2})$/);
if (!n) return; var str = '';
str += (n[1] != 0) ? (a[Number(n[1])] || b[n[1][0]] + ' ' + a[n[1][1]]) + 'crore ' : '';
str += (n[2] != 0) ? (a[Number(n[2])] || b[n[2][0]] + ' ' + a[n[2][1]]) + 'lakh ' : '';
str += (n[3] != 0) ? (a[Number(n[3])] || b[n[3][0]] + ' ' + a[n[3][1]]) + 'thousand ' : '';
str += (n[4] != 0) ? (a[Number(n[4])] || b[n[4][0]] + ' ' + a[n[4][1]]) + 'hundred ' : '';
str += (n[5] != 0) ? ((str != '') ? 'and ' : '') + (a[Number(n[5])] || b[n[5][0]] + ' ' + a[n[5][1]]) + 'only ' : '';
return str;
}
然后
return this.http.get<Data[]>(url).pipe(
map((data: any[]) => {
return data.map(d=>{
return {
this.inWords(yourdigitkey)//
}
})
}
)))