AngOn 6应用中的ngOnInIt和数组排序

时间:2019-07-24 12:14:40

标签: angular6

我有angular 6应用程序,其中每个角度项目都有以下代码。

ngOnInit() {
      this.LoadList("user");
      this.listName.sort((a:any,b:any) => {
        return a.name < b.name;
      })
     return this.listName;
  }
    onFocus() {
      this.showSearchResult = true;
    }
    LoadList(listType:string) {
      this.myService.dataList(listType).pipe(takeUntil(this.destroy$))
      .subscribe(data => {
        if(data.users)
        this.response=data.users.;
        if(this.response)  {
          for(let data of this.response) {
            this.listName.push({name: data.name, description:data.description})
           }
        }

        this.ref.detectChanges(); 
      });

在这里您看到列表没有按字母顺序排列(升序),请帮助我

1 个答案:

答案 0 :(得分:1)

首先

您的loadList方法调用服务,我认为这是异步的。因此,您必须执行类似的操作以进行排序(请参见sortList函数)

还请注意,在对字符串进行排序时,必须使用小写字母,因为大写字母可能会返回不必要的结果

ngOnInit() {
  this.LoadList("user");
}
  
sortList() {
  this.listName.sort((a,b) => {
    const nameA = a.name.toLowerCase();
    const nameB = b.name.toLowerCase();

    if (nameA  < nameB) return -1;
	if(nameA  > nameB) return 1;
	return 0;
  })
}

onFocus() {
  this.showSearchResult = true;
}

LoadList(listType:string) {
        this.myService.dataList(listType).pipe(takeUntil(this.destroy$))
      .subscribe(data => {
        if(data.users)
        this.response=data.users.;
        if(this.response)  {
          for(let data of this.response) {
            this.listName.push({name: data.name, description:data.description})
           }
           
           this.sortList();
        }

        this.ref.detectChanges(); 
});

我不知道您的实际代码,但是上面的代码会导致升序检查

var list = [{id: 10, name:'kenny'}, {id:20, name: 'abhi'}, {id: 30, name: 'c'}, {id: 40, name: 'ka'}, {id: 40, name: 'abha'}]

list.sort((a,b) => {
    const nameA = a.name.toLowerCase();
    const nameB = b.name.toLowerCase();

    if (nameA  < nameB) return -1;
    if(nameA  > nameB) return 1;
    return 0;
})

console.log(list)