簡體   English   中英

對象數組的自定義排序順序

[英]custom sort order on array of objects

我知道我們可以定義 json 對象數組的自定義排序函數。 但是如果訂單既不是desc nor asc 例如,假設我的數組如下所示:

[ {
    name: 'u'
  },
  {
    name: 'n'
  },
  {
    name: 'a'
  },
  { 
    name: 'n',
  } 
]

輸出應如下所示:

[ {
    name: 'n'
  },
  {
    name: 'n'
  },
  {
    name: 'a'
  },
  { 
    name: 'u',
  } 
]

其中所有以n開頭的名稱先排序,然后再排序。 我嘗試了以下自定義排序功能:

_sortByName(a, b){
        if (a.name === 'n'){
            return 1;
        } else if(b.name === 'n'){
            return 1;
        } else if(a.name < b.name){
            return 1;
        } else if(a.name > b.name){
            return -1;
        }
    }

但是為對象返回的順序是錯誤的。 這里出了什么問題?

如果您有任意排序順序,一個選項是將訂單分配給數組,然后使用indexOf

 var sortOrder = ['n', 'a', 'u']; var myArray = [{ name: 'u' }, { name: 'n' }, { name: 'a' }, { name: 'n' } ]; myArray.sort(function(a, b) { return sortOrder.indexOf(a.name) - sortOrder.indexOf(b.name); }); console.log(myArray); 

如果在任一數組中有許多值,則首先創建值索引映射然后使用sortOrder[a.name]可能是值得的。

1)你可以在這里使用indexOf

 const dict = "nau"; var myArray = [ { name: "u", }, { name: "n", }, { name: "a", }, { name: "n", }, ]; myArray.sort((a, b) => dict.indexOf(a.name) - dict.indexOf(b.name)); console.log(myArray);
 /* This is not a part of answer. It is just to give the output full height. So IGNORE IT */ .as-console-wrapper { max-height: 100% !important; top: 0; }

2)你可以在這里使用地圖

我在兩個character之間添加了一些間隙/空間,因為它們之間可能會有其他字符,因此您可以將它們放在它們之間

 const order = { n: 100, a: 200, u: 300, }; var myArray = [ { name: "u", }, { name: "n", }, { name: "a", }, { name: "n", }, ]; myArray.sort((a, b) => order[a.name] - order[b.name]); console.log(myArray);
 /* This is not a part of answer. It is just to give the output full height. So IGNORE IT */ .as-console-wrapper { max-height: 100% !important; top: 0; }

暫無
暫無

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

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