tengo una función, que se ve así:
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]); y la select :
<select defaultValue="Sort" onChange={(e) => setSortType(e.target.value)}> <option value="title">Alfabetycznie AZ</option> <option value="release_date">wg. daty rosnąco</option> <option value="charactersList">wg. liczby postaci rosnąco</option> </select>Me preguntaba, ¿cómo puedo cambiarlo, para poder elegir una opción de value="titleDESC" para que ordene DESC?
¿Puede usar una función de clasificación con una dirección de clasificación identificada?
function sortTitle(a, b, d) { return a.localeCompare(b) * d; } Que puede llamar desde su array.sort() así:
array.sort((a,b) => sortTitle(a,b,-1))vea este stackblitz: https://stackblitz.com/edit/js-ubeyxc
Si hace que el valor de llamada de d dependa de titleDESC o titleASC , puede usar la misma función de clasificación, simplemente cambie la dirección de la clasificación.
const d = (sortProperty==='titleDESC') ? -1 : 1; array.sort((a,b) => sortTitle(a,b,-1));