在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 常量的值键

如何在 TypeScript Angular 中使用外部 Javascript

如何在 Angular 的 Typescript 中使用数组