【问题标题】:Sorting children of a tree node in angular以角度对树节点的子节点进行排序
【发布时间】:2019-07-14 13:36:30
【问题描述】:

我有一个带有节点街道、城市、州、国家/地区的角度树视图。

State 是 Country 的子节点,City 是 State 的子节点,依此类推。 此外,每个节点都有自己的子节点。

例如:德国、法国、瑞典、挪威是国家节点中的值。 点击德国将显示柏林、巴伐利亚、 萨尔州,进一步选择巴伐利亚州将显示 巴伐利亚和稍后选择城市将显示其街道。

但是,我无法对这些国家、州、城市和街道的列表进行排序。

名称存储在名为label 的变量中。我正在使用以下内容对数组进行排序。 :

  getNames(id: string): Observable<Name[]> {

return this.httpClient
  .get(
    this.environmentService.endpoints.<<--insert url here-->
  )
  .pipe(
    map((data: any) => {
      data.sort((a, b) => {
          return a.Name > b.Name ? 1 : -1

      })
      return data
    })
  ) as Observable<Name[]>
 }

我用类似的树种

它重新洗牌,但不按字母顺序排序。

有没有办法按字母顺序对我的对象进行排序?

P.S:我想在服务中对其进行排序,然后发送给组件

【问题讨论】:

    标签: angular sorting service treeview components


    【解决方案1】:

    你能展示更多关于你如何排序的代码吗?您不需要使用管道映射,因为数组有自己的原生排序功能。

    sortFn(myArray: Array<any>, label: string) {
       return myArray.sort((a, b) => {
        if (a[label] < b[label]) return -1;
        if (a[label] > b[label]) return 1;
        return 0;
      }
    }
    

    【讨论】:

    • 所以你更新的功能,这就是你目前拥有的,它会随机移动你的标签?或者你有一个不同的函数返回一个树结构?还有,树形结构是什么样的?
    • 是的。这个适用于其他类型,但不适用于树
    • 您可能必须创建一个递归调用来对树进行排序,以便您可以对所有层进行排序......但我不明白为什么这至少对顶层不起作用跨度>
    • 我应该使用类似 node.data.label 而不是标签
    • 我得看看你的树形结构
    猜你喜欢
    • 2017-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-08
    • 2017-09-02
    • 1970-01-01
    • 2019-05-21
    • 2022-08-17
    相关资源
    最近更新 更多