對不起,沒有把標題中的具體排序,但我不能正確地說。是否可以使用sort()以這種特定方式對對象數組進行排序?
我正在排序的文件對象的名單,如名稱,上傳日期和類別的列表,我需要排序它的方式,最後上傳的文件推到頂部,其餘aren沒有排序。
因此,例如,如果我有從最舊到最新的按降序排列的列表,我仍然希望最新的列表位於頂部。
從數據庫返回時,列表已經按照類別,日期等進行了排序,所以我只需要進一步對它進行排序。
它必須在傳遞給sort()的函數中完成。
對不起,沒有把標題中的具體排序,但我不能正確地說。是否可以使用sort()以這種特定方式對對象數組進行排序?
我正在排序的文件對象的名單,如名稱,上傳日期和類別的列表,我需要排序它的方式,最後上傳的文件推到頂部,其餘aren沒有排序。
因此,例如,如果我有從最舊到最新的按降序排列的列表,我仍然希望最新的列表位於頂部。
從數據庫返回時,列表已經按照類別,日期等進行了排序,所以我只需要進一步對它進行排序。
它必須在傳遞給sort()的函數中完成。
Array#sort
不一定穩定,只要您排序只是一個屬性作爲第一個結果。
您需要爲移動等於(與0
引起的)項目對地方了,這裏的id
附加價值,這是爲了創造另一個值。
var data = [{ id: 0, date: '2017-01-01' }, { id: 2, date: '2017-01-01' }, { id: 5, date: '2017-01-02' }, { id: 6, date: '2017-01-05' }, { id: 9, date: '2017-01-06' }, { id: 19, date: '2017-01-11' }, { id: 24, date: '2017-02-01' }, { id: 67, date: '2017-02-01' }, { id: 80, date: '2017-02-11' }, { id: 90, date: '2017-02-21' }, { id: 101, date: '2017-02-23' }, { id: 149, date: '2017-02-28' }, { id: 163, date: '2017-03-01' }, { id: 190, date: '2017-03-02' }, { id: 321, date: '2017-03-05' }, { id: 444, date: '2017-03-17' }],
lastDate = data[data.length - 1].date;
data.sort(function (a, b) {
return (b.date === lastDate) - (a.date === lastDate);
});
console.log(data);
data.sort(function (a, b) {
return (b.date === lastDate) - (a.date === lastDate) || a.id - b.id;
});
console.log(data);
.as-console-wrapper { max-height: 100% !important; top: 0; }
另一解決方案是,使用Array#pop
爲最後一個項目和Array#unshift
在頂部處所述陣列的插入。
var data = [{ id: 0, date: '2017-01-01' }, { id: 2, date: '2017-01-01' }, { id: 5, date: '2017-01-02' }, { id: 6, date: '2017-01-05' }, { id: 9, date: '2017-01-06' }, { id: 19, date: '2017-01-11' }, { id: 24, date: '2017-02-01' }, { id: 67, date: '2017-02-01' }, { id: 80, date: '2017-02-11' }, { id: 90, date: '2017-02-21' }, { id: 101, date: '2017-02-23' }, { id: 149, date: '2017-02-28' }, { id: 163, date: '2017-03-01' }, { id: 190, date: '2017-03-02' }, { id: 321, date: '2017-03-05' }, { id: 444, date: '2017-03-17' }];
data.unshift(data.pop());
console.log(data);
.as-console-wrapper { max-height: 100% !important; top: 0; }
有很多解決方案。作爲最簡單的解決方案,您可以使用類似https://lodash.com/docs/4.17.4#orderBy
你可以做到這一點簡單的複合您的排序算法:
sortingLabels = ["date uploaded", "category", "date"]
myArray.sort((a,b) => {
for (l of sortingLabels) {
const comparison = compare(a,b,l)
if (comparison == 0) {continue}
return comparison
}
})
現在你要做的就是實現compare(a,b,label)
函數返回-1
,1
,或0
基於label
。
注: for循環for-of
作品ES2015 +,這是最流行的瀏覽器和Node.js的不過,如果你需要支持顯著舊的瀏覽器,你可能要考慮使用一般for-loop
一切皆有可能顯示你已經完成的工作是什麼 –