簡體   English   中英

如何根據對象的屬性對對象數組進行排序

[英]How to sort array of objects according to a property of the object

我有一個對象數組。 數組中的每個對象都有一個稱為“ priorityTag”的屬性

我想根據“ priorityTag”對數組進行升序排列。 因此,我編寫了以下發布的代碼,但是它不起作用。

請讓我知道如何根據“ priorityTag”對數組進行排序

注意 :PriorityTag是Array中包含的對象的屬性。 換句話說,數組中的每個元素都是一個對象,每個對象都有很多屬性,但是這些屬性之一是“ PriorityTag”

我想根據“ priorityTag”對數組進行排序

代碼

sortFeaturesPerPriority2(arr) {
logger.debug('[sortFeaturesPerPriority2]: arr:', arr);

 arr.sort((a, b) => a.priorityTag - b.priorityTag);
 }

為此,您可以使用我完成的原型

/**
 * ARRAY PROTOTYPE SORT BY
 * Used to sort an array by object field
 * @param {String} field
 */
Array.prototype.sortBy = function (field = '') {
    this.sort(function (a, b) {
        return a[field] == b[field] ? 0 : +( a[field] > b[field]) || -1;
    });
};

您可以這樣使用:

let array = [{name: 'Jonh', age: 71}, {name: 'Tracey', age: 58}];
array.sortBy('age');
console.log(array); // Display [ { name: 'Tracey', age: 58 }, { name: 'Jonh', age: 71 } ]

希望能幫助到你。

假設您在priorityTag integers like變量之類的integers like ,則需要在進行排序之前對其進行解析

sortFeaturesPerPriority2(arr) {
    logger.debug('[sortFeaturesPerPriority2]: arr:', arr);

     arr.sort(({priorityTag: p1}, {priorityTag: p2}) => parseInt(p1) - parseInt(p2));
 }

如果您不能將priorityTag解析為數值(假設您具有priorityTag == 'a'priorityTag == 'b' ),則可以在評論中查看@sander提供的鏈接。

編輯

並不是真正回答OP的問題,但是這是一種通過屬性定義各種排序的巧妙方法:

const arr = [
  {priorityTag: 'a'}, 
  {priorityTag: 'e'},
  {priorityTag: 'd'},
  {priorityTag: 'b'},
  {priorityTag: 'c'}, 
];

const numericSort = prop => ({[prop]: a}, {[prop]: b}) => a - b;
const alphaSort = prop => ({[prop]: a}, {[prop]: b}) => a < b ? -1 : 1;
const weirdCustomSort = prop => ({[prop]: a}, {[prop]: b}) => {
  const elements = ['a','e','b','d','c'];
  const aIndex = ~elements.indexOf(a) ? elements.indexOf(a) : elements.length;
  const bIndex = ~elements.indexOf(b) ? elements.indexOf(b) : elements.length;
  return aIndex - bIndex;
};

const compareBy = prop => sortFunc => sortFunc(prop)

console.log([...arr].sort(compareBy('priorityTag')(alphaSort)))
console.log([...arr].sort(compareBy('priorityTag')(numericSort)))
console.log([...arr].sort(compareBy('priorityTag')(weirdCustomSort)))

假設優先級標簽是一個數字,那么看起來正確。 我嘗試了這些代碼,並命令它們

const arr = [
  {priorityTag: 1},
  {priorityTag: 5},
  {priorityTag: 0},
  {priorityTag: 2},
  {priorityTag: 6},
]
arr.sort( (a,b) => a.priorityTag - b.priorityTag ); // 0,1,2,5,6

如果priorityTag是字符串,那么我將使用以下內容。 假設您可以確定大於默認值對字符串的工作方式,那么這實際上適用於字符串和數字。

arr.sort( (a,b) => a.priorityTag > b.priorityTag );

暫無
暫無

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

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