2015-06-08 78 views
5

Tôi có một mảng đối tượng có thuộc tính TechTypeProductName. Mảng đã cho đã được sắp xếp theo TechType (không nhất thiết theo bảng chữ cái); bây giờ trong mảng được sắp xếp này, nó phải được sắp xếp thêm theo thứ tự tăng dần dựa trên ProductName.Sắp xếp một mảng đối tượng được sắp xếp dựa trên thứ tự tăng dần của thuộc tính khác

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


} 
]; 

Các mảng được sắp xếp nên

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


    } 
    ]; 
+0

thể trùng lặp của [Sắp xếp mảng trên giá trị key] (http://stackoverflow.com/questions/16648076/sort-array-on-key-value) – rohithpr

Trả lời

2

này có phần liên quan đến loại ổn định. Cách điển hình để đảm bảo sắp xếp ổn định là bằng cách thêm dữ liệu phụ trợ mà cần được sắp xếp trong trường hợp các mục được tìm thấy giống nhau.

Tôi đang thực hiện việc này tại đây bằng hai thao tác bản đồ, tương tự như những gì bạn sẽ sử dụng cho Chuyển đổi Schwartz; dữ liệu phụ được sử dụng chỉ khi các loại công nghệ không khớp giữa hai mục.

Để minh họa hành vi đúng, tôi đã di chuyển các mục xung quanh để các loại công nghệ được sắp xếp theo thứ tự ngược lại từ câu hỏi.

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));

Các vấn đề liên quan