簡體   English   中英

如何通過對象的屬性值對對象數組進行排序,該屬性值本身不是自然可比的,但具有基於規則的優先級?

[英]How does one sort an array of objects by an object's property value which itself is not naturally comparable but has a rule based precedence?

我有一個對象。 我需要按 TranType 屬性對其進行排序。
Trantype 類似於 CS+、CS-、RS+、RS-、OPO、OPI、Security in、Security out。 我需要按 CS+、CS-、RS+、RS-、OPO、OPI、Security in、Security out 對其進行排序

例子:

[
  {
    'TranType':'CS+',
    'Name': 'Kumar'
  },
  {
    'TranType':'RS+',
    'Name': 'Lak'
  },
  {
    'TranType':'CS+',
    'Name': 'Cnk'
  },
  {
    'TranType':'CS-',
    'Name': 'Pro'
  },
  {
    'TranType':'CS-',
    'Name': 'Lhj'
  },
  {
    'TranType':'RS-',
    'Name': 'Speed'
  },
  {
    'TranType':'OPI',
    'Name': 'Neck'
  },
  {
    'TranType':'OPO',
    'Name': 'Dok'
  },
  {
    'TranType':'Security In',
    'Name': 'Kol'
  },
  {
    'TranType':'Security out',
    'Name': 'Klp'
  },
  {
    'TranType':'OPI',
    'Name': 'Tpi'
  },
  {
    'TranType':'RS+',
    'Name': 'Alo'
  },
  {
    'TranType':'OPO',
    'Name': 'Tpp'
  },
  {
    'TranType':'Security In',
    'Name': 'Jkl'
  },
  {
    'TranType':'RS-',
    'Name': 'Aoi'
  },
  {
    'TranType':'Security out',
    'Name': 'Nko'
  }
]

我需要將其排序為以下之一。

在這里,我需要將 ( CS+, OPI, RS+, Security In ) 的 trantyoe 放在首位。 並且(CS-、RS-、OPO、安全輸出)是第二優先級。

[
  {
    'TranType':'CS+',
    'Name': 'Kumar'
  },
  {
    'TranType':'CS+',
    'Name': 'Cnk'
  },
  {
    'TranType':'OPI',
    'Name': 'Neck'
  },
  {
    'TranType':'OPI',
    'Name': 'Tpi'
  },
  {
    'TranType':'RS+',
    'Name': 'Lak'
  },
  {
    'TranType':'RS+',
    'Name': 'Alo'
  },
  {
    'TranType':'Security In',
    'Name': 'Kol'
  },
  {
    'TranType':'Security In',
    'Name': 'Jkl'
  },
  {
    'TranType':'CS-',
    'Name': 'Pro'
  },
  {
    'TranType':'CS-',
    'Name': 'Lhj'
  },
  {
    'TranType':'RS-',
    'Name': 'Speed'
  },
  {
    'TranType':'RS-',
    'Name': 'Aoi'
  },
  {
    'TranType':'OPO',
    'Name': 'Dok'
  },
  {
    'TranType':'OPO',
    'Name': 'Tpp'
  },
  {
    'TranType':'Security out',
    'Name': 'Klp'
  },
  {
    'TranType':'Security out',
    'Name': 'Nko'
  }
]

請幫助我按預期獲得輸出。

最簡單和最直接的方法是使用一個對象來查找TranType優先級值......

 const tranTypePrecedences = { 'CS+': 1, 'OPI': 2, 'RS+': 3, 'Security In': 4, 'CS-': 5, 'RS-': 6, 'OPO': 7, 'Security out': 8, }; console.log( [{ 'TranType':'CS+', 'Name': 'Kumar' }, { 'TranType':'RS+', 'Name': 'Lak' }, { 'TranType':'CS+', 'Name': 'Cnk' }, { 'TranType':'CS-', 'Name': 'Pro' }, { 'TranType':'CS-', 'Name': 'Lhj' }, { 'TranType':'RS-', 'Name': 'Speed' }, { 'TranType':'OPI', 'Name': 'Neck' }, { 'TranType':'OPO', 'Name': 'Dok' }, { 'TranType':'Security In', 'Name': 'Kol' }, { 'TranType':'Security out', 'Name': 'Klp' }, { 'TranType':'OPI', 'Name': 'Tpi' }, { 'TranType':'RS+', 'Name': 'Alo' }, { 'TranType':'OPO', 'Name': 'Tpp' }, { 'TranType':'Security In', 'Name': 'Jkl' }, { 'TranType':'RS-', 'Name': 'Aoi' }, { 'TranType':'Security out', 'Name': 'Nko' }].sort((a, b) => tranTypePrecedences[a.TranType] - tranTypePrecedences[b.TranType] ) );
 .as-console-wrapper { min-height: 100%!important; top: 0; }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM