簡體   English   中英

數組在Javascript中的另一個值排序中按字母順序排序

[英]Array sorting alphabetically within another value sort in Javascript

也許我以錯誤的方式提出了這個問題,但無法從互聯網上找到答案。

我有一組可以按各種值(例如職位,部門)排序的員工。

有許多具有相同價值觀的員工(例如,許多調酒師或許多從事賓客服務的人)。

因此,我需要將這些子組(所有調酒師或所有來賓服務人員或其他任何人員)按姓氏進行字母排序(理想情況下,然后是具有相同姓氏的組,再按名字進行排序)。

這是我目前的樣子:

  const sorted = state.employees.sort(function(a, b) {
    if (a[filterValue] === b[filterValue]) {
      let alphaA = a.lastName, alphaB = b.lastName;
      return alphaA < alphaB ? -1 : alphaA > alphaB ? 1 : 0;
    }
    return a[filterValue] > b[filterValue] ? 1 : -1;
  });

但是,返回的數組會混合在一起,並在每次單擊時返回不同的順序,如下所示:

在此處輸入圖片說明

而且沒有實現asc / desc邏輯,因此,從理論上講,多次單擊應返回相同的排序數組,而不是以不同的順序返回一個數組。

大概是因為按字母順序進行的比較並沒有比較整個匹配值組(全部在住宿部門),而是僅比較立即值,但是我不確定這是問題所在,並且完全不確定如何解決。

對於完成任務非常有幫助,但是對解釋非常感謝,因為我顯然不完全了解排序的工作原理。

非常感謝!

您可以考慮使用諸如thenBy之類的預先存在的庫,而不是設計自己的比較器函數。 它允許您使用如下符號對多個屬性進行排序:

state.employees.sort(firstBy('position').thenBy('lastName').thenBy('firstName'));

顯然,您必須根據需要使用它,並相應地重置排序,但這應該使您不必實現自己的版本

var filterValue = 'department' // using a dummy one for now


state.employees.sort(function(a, b){
    if (a[filterValue] > b[filterValue]) return 1;
    if (a[filterValue] < b[filterValue]) return -1;
    //check your filters
    if (a.lastname < b.lastname ) return -1;
    if (a.lastname > b.lastname ) return 1;
    //then check their last names
    if (a.firstname < b.firstname ) return -1;
    if (a.firstname > b.firstname ) return 1;
    //then check their first names
    return 0;
});

這是我的演示: https : //jsfiddle.net/zjhs20vz/

這是假設我正確回答了您的問題。 在排序過濾器的邏輯漏斗的基礎上進行排序是很有意義的,如果它們相等,則是姓氏,然后是名字

暫無
暫無

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

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