在Angular / Typescript中使用整数和字母对数组进行排序
Posted
技术标签:
【中文标题】在Angular / Typescript中使用整数和字母对数组进行排序【英文标题】:Sort an array with integers and letters alphabetic in Angular / Typescript 【发布时间】:2018-05-24 10:01:24 【问题描述】:我打算做什么
我尝试像这样对数组进行排序...
1 2 2(a) 2(b) 2(b) #AsimpleName 2(b) #NameWithN 3 4 4(a) ......在 Angular2 中。
我当前的代码
组件
this.streetDetailRef = this.afDatabase.list('data/users/' + this.currentUserID + '/territory/' + this.sStreet.parentKey + '/' + this.sStreet.key + '/houseNumbers/');
this.streetDetailData = this.streetDetailRef.snapshotChanges().map(changes =>
return changes.map(c => ( key: c.payload.key, ...c.payload.val() )).sort();
);
我认为的循环
<ion-item-sliding *ngFor="let house of streetDetailData | async | orderBy: 'number':false" #slidingItem>
<strong> house.number </strong> ...
'number'
在这种情况下是没有字母的干净数字。我将这封信存储在一个单独的 firebase 条目中。但如果需要,肯定可以将它们存储在相同的位置。
附加信息:我正在使用 VadimDez 的 ngx-orderBy-pipe:https://github.com/VadimDez/ngx-order-pipe
当前结果
【问题讨论】:
【参考方案1】:这个函数应该可以解决问题:
function sortData(array: Array<number | string>): Array<number | string>
return array.sort((a, b) => a < b ? -1 : 1);
这里是使用示例:
const sorted = sortData(['4(a)', 4, 3, '2(b) #NameWithN', '2(b) #AsimpleName']);
sorted // [ '2(b) #AsimpleName', '2(b) #NameWithN', 3, 4, '4(a)' ]
【讨论】:
@Hav - 这将是我用于排序的新 goto 函数。谢谢!【参考方案2】:更新:虽然我的答案有效,但接受的答案更好,我将采用它以供将来使用。
您可以使用这个简单的比较功能,以及 Typescript 的内置 sort()
功能来获得您想要的答案。
打字稿:
function sortStrings(a: string, b: string)
a = a.toLowerCase();
b = b.toLowerCase();
return a > b ? 1 : (a < b ? -1 : 0);
console.log(['4(a)', '3', '2', '2(b) secondName',
'2(b)firstName','2(b)','2(a)', '4', '1'].sort(sortStrings));
输出:
[ '1',
'2',
'2(a)',
'2(b)',
'2(b) firstName',
'2(b) secondName',
'3',
'4',
'4(a)' ]
【讨论】:
【参考方案3】:使用 Typescript,您可以对您拥有的任何集合进行排序。以下是可能对您有所帮助的代码示例。我想将您的 id 视为字符串将解决问题。
let names: [string];
let numbers: [number];
names.sort(this.sortByLetter);
numbers.sort(this.sortByNumber);
sortByLetter(string1: string, string2: string)
if (string1 > string2) return 1
else if (string1 === string2) return 0
else return -1;
sortByNumber(n1: number, n2: number)
return n2 - n1;
【讨论】:
以上是关于在Angular / Typescript中使用整数和字母对数组进行排序的主要内容,如果未能解决你的问题,请参考以下文章
在 Angular 2 / Typescript 中使用 IScroll
Typescript - 如何在 Angular2 中正确使用 jsPDF?
在Angular / Typescript中使用整数和字母对数组进行排序
使用 Angular 在 Typescript 中读取 JSON 常量的值键