我正在嘗試按比率和字母順序對一組物件進行排序。
所以我成功地按費率對其進行了排序。但問題是當我嘗試按字母順序對其進行排序時,它不起作用。我不知道如何按字母順序再次對其進行排序。
源代碼和結果寫在底部。
// This is the success result that I want to get **(sorted by rate && sorted by alphabetic order)**
{
abcd ( title)
lorem ipsum (comment)
5 (rate)
},
{
efg
lorem ipsum
5
},
{
bdg
lorem ipsum
3
},
{
def
lorem ipsum
3
},
{
abc
lorem ipsum
1
}
源代碼
const Reviews = ({ books, initialData }) => {
const combinedBooks = initialData.concat(books);
// sort by rate
let sorted = combinedBooks.sort((a, b) => {
return b.score - a.score;
});
// sort by alphabetical order
let newSorted = sorted.sort(function (a, b) {
let fa = a.title.toLowerCase(),
fb = b.title.toLowerCase();
if (fa < fb) {
return -1;
}
if (fa > fb) {
return 1;
}
return 0;
});
return (
<section style={{ border: "3px solid green" }}>
<Header title="Book Review Lists" />
{sorted.map((review) => {
const { id, title, comment, score } = review;
return (
<Review key={id} title={title} comment={comment} score={score} />
);
})}
</section>
);
};
export default Reviews;
//代碼結果
{
abc
lorem ipsum
1
},
{
abcd
lorem ipsum
5
},
{
bdg
lorem ipsum
3
},
{
def
lorem ipsum
3
},
{
efg ( book title)
lorem ipsum ( book review )
5 (rate)
},
uj5u.com熱心網友回復:
您首先按比率排序,然后按字母順序排序,因此您按字母順序獲取專案,如果兩個專案具有相同的字母順序,則按排名。
要按等級對字母串列進行排序,我們這樣做:
let newerSorted = [...newSorted].sort((a, b) => {
return b.score - a.score;
});
因此,串列現在按等級排序,并且具有相同等級的專案按字母順序排序。
作業示例:
const Reviews = ({ books, initialData }) => {
const combinedBooks = initialData.concat(books);
// sort by rate
let sorted = combinedBooks.sort((a, b) => {
return b.score - a.score;
});
// sort by alphabetical order
let newSorted = sorted.sort(function (a, b) {
let fa = a.title.toLowerCase(),
fb = b.title.toLowerCase();
if (fa < fb) {
return -1;
}
if (fa > fb) {
return 1;
}
return 0;
});
let newerSorted = [...newSorted].sort((a, b) => {
return b.score - a.score;
});
const Review = (props) => {
return(
<li key={props.key}>{props.title} - {props.score}</li>
);
}
return (
<div>
<section style={{ border: "3px solid green" }}>
<p>Sorted alphabetically, then by rank</p>
{newSorted.map((review) => {
const { id, title, comment, score } = review;
return (
<Review key={id} title={title} comment={comment} score={score} />
);
})}
</section>
<section style={{ border: "3px solid green" }}>
<p>Sorted by rank, then alphabetically</p>
{newerSorted.map((review) => {
const { id, title, comment, score } = review;
return (
<Review key={id} title={title} comment={comment} score={score} />
);
})}
</section>
</div>
);
};
let initialData = [
{
id: 27641,
title: "abc",
comment: "m ipsum",
score: 1
},
{
id: 121232,
title: "zdseru",
comment: 'lorem ipsum',
score: 5,
},
{
id: 121232,
title: "adseru",
comment: 'lorem ipsum',
score: 5,
},
{
id: 41,
title: "new title",
comment: "lorem ipsum",
score: 3
},
{
id: 27641,
title: "xef",
comment: "lorem ipsum",
score: 3
},
{
id: 33542,
title: "ifg",
comment: "lorem ipsum ( book review )",
score: 2
},];
let books = [{
id: 33542,
title: "new title",
comment: "comment",
score: 1
}];
ReactDOM.render(<Reviews books={books} initialData={initialData}/>, document.getElementById('sort'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
<div id="sort"></div>
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/359491.html
標籤:javascript 排序
