簡體   English   中英

具有唯一值的對象鍵的排序數組

[英]Sort array for object key that holds unique value

我有一個看起來像這樣的數組:

var coll = [
{
    prop1:true,
    prop2:false,
    id:"888399"
},
{
    prop1:true,
    prop2:true,
    id:"/XS-555224"
},
{
    prop1:false,
    prop2:false,
    id:"/DL-555444"
}
]

我想對數組進行排序,以使ID以“ / DL”開頭的元素(對於該元素始終只有一個)始終從頂部開始。 我怎么做?

我不認為自定義排序將是最佳選擇,因為我不必相互比較元素,我只需要找到帶有“ / DL”的元素,將其切出並插入到數組的開頭。

但是,要做到這一點,我仍然需要遍歷數組的每個元素以找到該元素,然后執行一些操作。 因此,我開始認為我也可以進行排序。 問題是如何編寫正確的條件以比較2個項目並檢查ID字符串的開頭。 因此,我認為我可以簡單地測試String的開頭並自己返回值,而無需進行比較。

所以我嘗試這樣:

coll.sort(function(a,b){
    var itemA = a.id;
    var itemB = b.id;

    if(itemA.lastIndexOf("/DL") === 0){
        return 1;
    }
});

但是這種比較是行不通的。 我的自定義比較功能有什么問題? 感謝您提供任何有用的提示。

您可以嘗試以下方法:

var orderedArr = coll.sort(function(val){
    return !val.id.toString().startsWith('/DL');
});

[編輯]

使用IE的用戶一旦添加,便可以添加它,以使將來的生活更加輕松:

if (!String.prototype.startsWith) {
   String.prototype.startsWith = function(searchString, position) {
       position = position || 0;
       return this.indexOf(searchString, position) === position;
   };
}

這樣您就可以隨時隨地使用startsWith。

即使您只想查找一條記錄移到最前面,您仍然需要檢查排序中的兩個參數,它可能是其中一個。

coll.sort(function(a,b) {
  return a.id.indexOf('/DL') === 0 ? -1 : b.id.indexOf('/DL') === 0 ? 1 : 0;   
});

基本上,我們希望'/ DL'記錄是數組中的'最低'值,因此它將首先顯示(從低到高排序)。 如果a較低,則返回負數;如果b較低,則返回正數。 因此,在對a是/ DL進行排序時,我們需要返回負數。 如果b是/ DL,則返回正數。 因此,該英語表達基本上是“ a是我們的記錄嗎?-1。如果不是, b是我們的記錄嗎?1。如果兩者都不是,那么0。”

暫無
暫無

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

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