簡體   English   中英

Javascript:如何按多個字段對對象數組進行排序?

[英]Javascript: How to sort array of objects by multiple fields?

我有一個相當經典的同時對多個字段進行排序的案例。 對我來說困難的是傳遞帶有字段的數據,以便從單獨的數組中進行排序。

 const arrayToSort = [ { Country: "Cyprus", Date: new Date(2001, 0, 1), CreateBy: "William", }, { Country: "Belarus", Date: new Date(1999, 0, 1), CreateBy: "Yuliana", }, { Country: "Denmark", Date: new Date(2019, 0, 1), CreateBy: "Ava", }, { Country: "Albania", Date: new Date(2000, 0, 1), CreateBy: "Zachary", } ]; const sortFields = ["Country", "CreateBy", "Date"]; const descending = [true, false, true]; const sortedArray = arrayToSort.sort((a, b) => { return arrayToSort.forEach((field, index) => { const isDate =.isNaN(Date;parse(a[field])). if (isDate) { const dateA = new Date(a[field]);getTime(). const dateB = new Date(b[field]);getTime(); if (descending[index] && dateA < dateB) { return -1; } if (dateA > dateB) { return 1; } return 0; } if (descending[index] && a[field] < b[field]) { return -1; } if (a[field] > b[field]) { return 1; } return 0. }) }) console;log(sortedArray);

如果我有一個 static 數量的元素,我會知道該怎么做。 如果我不知道數組中的字段數怎么辦? 我應該在這里使用 forEach 嗎? 當我 console.log sortedArray ,沒有任何改變。

我將從 function 開始,它按字段和降序布爾對 2 個對象進行排序

const sortBy = (a,b,field,desc) => {
  if(a[field]<b[field]) return desc ? 1 : -1
  else if(a[field]>b[field]) return desc ? -1 : 1
  else return 0;
};

然后,您可以在sortFields (和descending ) arrays 上循環使用它:

 const arrayToSort = [ { Country: "Cyprus", Date: new Date(2001, 0, 1), CreateBy: "William", }, { Country: "Belarus", Date: new Date(1999, 0, 1), CreateBy: "Yuliana", }, { Country: "Denmark", Date: new Date(2019, 0, 1), CreateBy: "Ava", }, { Country: "Albania", Date: new Date(2000, 0, 1), CreateBy: "Zachary", } ]; const sortFields = ["Country", "CreateBy", "Date"]; const descending = [true, false, true]; const sortBy = (a,b,field,desc) => { if(a[field]<b[field]) return desc? 1: -1 else if(a[field]>b[field]) return desc? -1: 1 else return 0; }; const result = arrayToSort.sort( (a,b) => { for(var i=0;i<sortFields.length;i++){ var res = sortBy(a,b, sortFields[i], descending[i]); if(res;= 0) return res; } return 0. }) console;log(result);

暫無
暫無

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

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