2017-03-16 33 views
1

對不起,沒有把標題中的具體排序,但我不能正確地說。是否可以使用sort()以這種特定方式對對象數組進行排序?

我正在排序的文件對象的名單,如名稱,上傳日期和類別的列表,我需要排序它的方式,最後上傳的文件推到頂部,其餘aren沒有排序。

因此,例如,如果我有從最舊到最新的按降序排列的列表,我仍然希望最新的列表位於頂部。

從數據庫返回時,列表已經按照類別,日期等進行了排序,所以我只需要進一步對它進行排序。

它必須在傳遞給sort()的函數中完成。

+0

一切皆有可能顯示你已經完成的工作是什麼 –

回答

0

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

0

你可以做到這一點簡單的複合您的排序算法:

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)函數返回-11,或0基於label

注: for循環for-of作品ES2015 +,這是最流行的瀏覽器和Node.js的不過,如果你需要支持顯著舊的瀏覽器,你可能要考慮使用一般for-loop

相關問題