在Angular / Typescript中按字母和字母排序数组

时间:2017-12-10 21:06:45

标签: angular typescript firebase ionic2 angularfire2

我打算做什么

我尝试对这样的数组进行排序......

  • 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

当前结果

enter image description here

3 个答案:

答案 0 :(得分: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)' ]

答案 1 :(得分:2)

这个功能可以解决问题:

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)' ]

答案 2 :(得分:1)

使用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;
}