¿Es posible, de alguna manera, ordenar una matriz con algunos números "entre"?
[31, 33/34, 34, 29].sort((a, b) => a.toString().localeCompare(b.toString()))//para devolver [29, 31, 33/34, 34] en su lugar [0.9705882352, 29, 31, 34]
Como se menciona en los comentarios, la única forma en que esto funcionará es si usa una cadena para capturar los números. El motor almacenará su 33/34 como el decimal. No hay forma de recuperar el valor original.
Hacerlo es solo un simple análisis y clasificación.
var nums = ['31', '33/34', '34', '29'] nums.sort((a, b) => Number(a.split('/')[0]) - Number(b.split('/')[0])); console.log(nums);Ahora es posible que deba agregar más lógica si puede tener varios números para empujar el 33/34 al lugar correcto. Al no conocer todos los casos de uso, no intentaré adivinar.
Al convertir a cadena, está convirtiendo la fracción 33/34 (= 0.9705882352 ). Eso es todo lo que está visible en el intérprete JS: no importa si proporcionó 0.9705882352 o 33/34 o 66/68 . Entonces, como lo indican @ninascholz y @epascarello, debes comenzar con hilos. Con cadenas, su código debería funcionar bien como en la demostración a continuación:
const nums = ['31', '33/34', '34', '29'] nums.sort((a, b) => a.localeCompare(b)); console.log( nums );