我有一个函数,看起来像这样:
const [data, setData] = useState([]);
const [sortType, setSortType] = useState("title");
useEffect(() => {
const sortArray = (type) => {
const types = {
title: "title",
release_date: "release_date",
charactersList: "charactersList",
};
const sortProperty = types[type];
if (sortProperty === "charactersList") {
const sorted = [...episodes].sort(
(a, b) => a.charactersList.length - b.charactersList.length
);
setData(sorted);
} else {
const sorted = [...episodes].sort((a, b) =>
("" + a[sortProperty]).localeCompare("" + b[sortProperty])
);
setData(sorted);
}
};
sortArray(sortType);
}, [episodes, sortType]);
和select
:
<select defaultValue="Sort" onChange={(e) => setSortType(e.target.value)}>
<option value="title">Alfabetycznie A-Z</option>
<option value="release_date">wg. daty rosnąco</option>
<option value="charactersList">wg. liczby postaci rosnąco</option>
</select>
我想知道,我该如何更改它,这样我就可以选择一个值="的选项;title DESC";以便对DESC进行排序?
您可以使用一个具有指定排序方向的排序函数吗?
function sortTitle(a, b, d) {
return a.localeCompare(b) * d;
}
您可以从array.sort()
这样调用:
array.sort((a,b) => sortTitle(a,b,-1))
请参阅此stackblitz:https://stackblitz.com/edit/js-ubeyxc
如果使d
的调用值取决于titleDESC
或titleASC
,则可以使用相同的排序函数,只需更改排序的方向即可。
const d = (sortProperty==='titleDESC') ? -1 : 1;
array.sort((a,b) => sortTitle(a,b,-1));