如何将排序函数更改为同时接受升序和降序



我有一个函数,看起来像这样:

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的调用值取决于titleDESCtitleASC,则可以使用相同的排序函数,只需更改排序的方向即可。

const d = (sortProperty==='titleDESC') ? -1 : 1;
array.sort((a,b) => sortTitle(a,b,-1));

相关内容

  • 没有找到相关文章

最新更新