簡體   English   中英

根據另一個屬性的升序對排序的對象數組進行排序

[英]Sort a sorted object array based on ascending order of another attribute

我有一組具有TechTypeProductName屬性的對象。 給定的數組已經按TechType排序(不一定按字母順序); 現在在這個有序數組中,它必須按照ProductName升序進一步排序。

var products= [
    {
        "TechType": "ADSL",
        "ProductName": " Zen ADSL Services",
            }, {
        "TechType": "ADSL",
        "ProductName": "ADSL Services",
            }, {
        "TechType": "T1",
        "ProductName": "T1-Voice",
},{
      "TechType": "T1",
        "ProductName": " Aviate T1-Voice",


 }
];

排序的數組應該是

  var products= [
        {
            "TechType": "ADSL",
            "ProductName": " ADSL Services",
                }, {
            "TechType": "ADSL",
            "ProductName": "Zen ADSL Services",
                }, {
            "TechType": "T1",
            "ProductName": " Aviate T1-Voice",
    },{
          "TechType": "T1",
            "ProductName": " T1-Voice",


     }
    ];

這與穩定排序有些相關。 確保穩定排序的典型方法是添加輔助數據,以便在發現項目相同時對其進行排序。

我在這里使用兩個map操作,類似於你用於Schwartzian變換的操作; 僅當技術類型在兩個項目之間不匹配時才使用輔助數據。

為了證明正確的行為,我移動了項目,以便技術類型按照問題的相反順序排序。

 var products = [{ "TechType": "T1", "ProductName": "T1-Voice", },{ "TechType": "T1", "ProductName": "Aviate T1-Voice", }, { "TechType": "ADSL", "ProductName": "Zen ADSL Services", }, { "TechType": "ADSL", "ProductName": "ADSL Services", }]; function sortByStableProperty(array, prop, fn) { // decorate var temp = array.map(function(item, index) { return [item, index]; }); temp.sort(function(a, b) { // sort by auxiliary data or callback function return a[0][prop] == b[0][prop] ? fn(a[0], b[0]) : a[1] - b[1]; }); // undecorate return temp.map(function(item) { return item[0]; }); } // actual sort products = sortByStableProperty(products, 'TechType', function(a, b) { return a.ProductName.localeCompare(b.ProductName); }); console.log(JSON.stringify(products)); 

暫無
暫無

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

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