我正在嘗試根據用戶選擇的內容按特定值對物件陣列進行排序。該函式正在回傳一個結果,但無論運行哪種情況,它總是相同的。我已經測驗過每個案例都正確運行并且它們是正確的,但是排序功能似乎不起作用。
我正在構建一個 nextjs 應用程式并在每次更改 sortBy 值時在 useEffect 中運行排序。
const x = [
{
timestamp: 1000,
fairity: 1,
communication: 3,
manners: 3,
location: 2,
price: 5,
overall: 4
},
{
timestamp: 234,
fairity: 4,
communication: 2,
manners: 4,
location: 1,
price: 1,
overall: 1
},
{
timestamp: 23432,
fairity: 4,
communication: 1,
manners: 2,
location: 1,
price: 4,
overall: 3
},
]
const sortByOptions = {
DATE_ASC: 'DATE_ASC',
DATE_DESC: 'DATE_DESC',
LANDLORD_ASC: 'LANDLORD_ASC',
LANDLORD_DESC: 'LANDLORD_DESC',
PROPERTY_ASC: 'PROPERTY_ASC',
PROPERTY_DESC: 'PROPERTY_DESC'
};
const sortReviews = (_reviews, by) => {
console.log('asc', _reviews.sort((a, b) => a.timestamp - b.timestamp))
console.log('desc', _reviews.sort((a, b) => b.timestamp - a.timestamp))
switch (by) {
case sortByOptions.DATE_ASC:
return _reviews.sort((a, b) => a.timestamp - b.timestamp);
case sortByOptions.DATE_DESC:
return _reviews.sort((a, b) => b.timestamp - a.timestamp);
case sortByOptions.LANDLORD_ASC:
return _reviews.sort((a, b) => (a.manners a.fairity a.communication) - (b.manners b.fairity b.communication));
case sortByOptions.LANDLORD_DESC:
return _reviews.sort((a, b) => (b.manners b.fairity b.communication) - (a.manners a.fairity a.communication));
case sortByOptions.PROPERTY_ASC:
return _reviews.sort((a, b) => (a.location a.price a.overall) - (b.location b.price b.overall));
case sortByOptions.PROPERTY_DESC:
return _reviews.sort((a, b) => (b.location b.price b.overall) - (a.location a.price a.overall));
default:
return [];
}
};
console.log(sortReviews(x, sortByOptions.DATE_DESC))
uj5u.com熱心網友回復:
我意識到我錯誤地使用了排序功能。我認為它回傳了一個值,但它只是改變了給定的陣列。我修改了我的實作,以便在地圖出現時簡單地執行此操作。
const sortByOptions = {
DATE_ASC: 'DATE_ASC',
DATE_DESC: 'DATE_DESC',
LANDLORD_ASC: 'LANDLORD_ASC',
LANDLORD_DESC: 'LANDLORD_DESC',
PROPERTY_ASC: 'PROPERTY_ASC',
PROPERTY_DESC: 'PROPERTY_DESC'
};
const sortByFunctions = {
DATE_ASC: (a, b) => a.timestamp - b.timestamp,
DATE_DESC: (a, b) => b.timestamp - a.timestamp,
LANDLORD_ASC: (a, b) => (a.manners a.fairity a.communication) - (b.manners b.fairity b.communication),
LANDLORD_DESC: (a, b) => (b.manners b.fairity b.communication) - (a.manners a.fairity a.communication),
PROPERTY_ASC: (a, b) => (a.location a.price a.overall) - (b.location b.price b.overall),
PROPERTY_DESC: (a, b) => (b.location b.price b.overall) - (a.location a.price a.overall)
};
reviews.sort(sortByFunctions[sortBy]).map((x, i) => (...));
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/514770.html
