簡體   English   中英

Javascript自定義排序,在底部對某些項目進行分組並在其中進行排序

[英]Javascript custom sort, group certain items at bottom and sort within

在javascript中,我有一個像這樣的項目數組:

[
  'title',
  'firstname',
  'company',
  '[m]usr_phone'
  '[m]usr_city'
]

我想使用自定義數組排序函數對其進行排序,以便所有非 [m] 項排序在頂部,所有 [m] 項都排序並推到底部(在所有非 [m] 項之后)

為了實現這一點,我嘗試了這樣的排序功能:

function(a, b) {
            if (!a.indexOf('[m]') && b.indexOf('[m]') === 0
                || a.indexOf('[m]') && b.indexOf('[m]')) {
                    return -1;
            }

            if (a.indexOf('[m]') === 0 && !b.indexOf('[m]')) {
                return 1;
            }

            return 0;
        }

但無法讓它正常工作。 我希望輸出是:

[
  'company',
  'firstname',
  'title',
  '[m]usr_city'
  '[m]usr_phone'
]

謝謝你的幫助!

您可以檢查前綴並稍后按String#localeCompare排序。

 var array = ['title', 'firstname', 'company', '[m]usr_phone', '[m]usr_city']; array.sort(function (a, b) { return (a.slice(0, 3) === '[m]') - (b.slice(0, 3) === '[m]') || a.localeCompare(b); }); console.log(array);

您想以相同的方式比較同一“類”中的項目(即以[m]開頭或不以[m]開頭),因此使用a.startsWith("[m]") == b.startsWith("[m]")要做到這一點,然后使用String#localeCompare

 console.log([ "company", "firstname", "title", "[m]usr_phone", "[m]usr_city" ].sort((a, b) => { if (a.startsWith("[m]") == b.startsWith("[m]")) { return a.localeCompare(b); } else { return (a.startsWith("[m]") ? 1 : -1); } }));

暫無
暫無

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

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