Tengo un poco de dificultad para clasificar una serie de objetos. Por el momento tengo un conjunto de datos como ordenar
[ { "index":"football", "values":0.3, "id":"1" }, { "index":"Unknown", "values":0.5, "id":"2" }, { "index":"golf", "values":0.1, "id":"3" }, { "index":"cricket", "values":0.222, "id":"4", }, { "index":"Other", "values":0.333, "id":"5" }, { "index":"netball", "values":0.753, "id":"6", }, ]Lo que estoy tratando de hacer es clasificar esto en función de sus valores, con el más alto en la parte superior. Para hacer esto, hice
myDataSet.sort((a, b) => parseFloat(b.values) - parseFloat(a.values));Esto parece funcionar. Sin embargo, es la segunda parte con la que estoy luchando. Cualquiera que sea el orden en el que se ordene, siempre necesito Otro segundo desde abajo y Desconocido abajo. Así que lo anterior debería convertirse en esto
[ { "index":"netball", "values":0.753, "id":"6", }, { "index":"football", "values":0.3, "id":"1" }, { "index":"cricket", "values":0.222, "id":"4", }, { "index":"golf", "values":0.1, "id":"3" }, { "index":"Other", "values":0.333, "id":"5" }, { "index":"Unknown", "values":0.5, "id":"2" }, ]Intenté usar un filtro, esto parece ponerlos en la parte inferior, pero luego el resto ya no está ordenado
myDataSet.filter((e) => e.index === 'Other') .filter((e) => e.index === 'Unknown') .sort((a, b) => parseFloat(b.values) - parseFloat(a.values));¿Cómo puedo ordenar según sus valores pero mantener Otro y Desconocido en la parte inferior?
Gracias
Sugeriría crear una función personalizada para determinar el orden de clasificación, digamos getSortValue() y luego usar Array.sort():
let a = [ { "index":"football", "values":0.3, "id":"1" }, { "index":"Unknown", "values":0.5, "id":"2" }, { "index":"golf", "values":0.1, "id":"3" }, { "index":"cricket", "values":0.222, "id":"4", }, { "index":"Other", "values":0.333, "id":"5" }, { "index":"netball", "values":0.753, "id":"6", }, ] function getSortValue(obj) { const key = obj.index.toLowerCase(); return { "unknown": -2, "other": -1 }[key] || obj.values; } console.log(a.sort((a,b) => getSortValue(b) - getSortValue(a))); .as-console-wrapper { max-height: 100% !important; top: 0; }Puede ordenar la matriz directamente con un objeto para el orden deseado y un valor predeterminado para todos los demás valores desconocidos.
Luego use values directamente sin conversión.
const data = [{ index: "netball", values: 0.753, id: "6" }, { index: "football", values: 0.3, id: "1" }, { index: "cricket", values: 0.222, id: "4" }, { index: "golf", values: 0.1, id: "3" }, { index: "Other", values: 0.333, id: "5" }, { index: "Unknown", values: 0.5, id: "2" }], bottom = { Other: 1, Unknown: 2 }; data.sort((a, b) => (bottom[a.index] || 0) - (bottom[b.index] || 0) || b.values - a.values ); console.log(data); .as-console-wrapper { max-height: 100% !important; top: 0; }