Pregunta

Tengo una serie de objetos JavaScript que tienen una descripción de cadena.Estoy intentando implementar un algoritmo de clasificación simplificado que eliminará mayúsculas y minúsculas, eliminará las etiquetas HTML y luego eliminará todo excepto letras y dígitos.Tengo:

DASHBOARD.todo_entries.sort(function(first, second)
  {
  var first_workbench = first.description.toLowerCase();
  var second_workbench = second.description.toLowerCase();
  first_workbench = first_workbench.replace(/<.*?>/, '');
  second_workbench = second_workbench.replace(/<.*?>/, '');
  first_workbench = first_workbench.replace(/[^_\w]/, '');
  second_workbench = second_workbench.replace(/[^_\w]/, '');
  console.log('"' + first_workbench + '", "' + second_workbench + '"');
  return (first_workbench > second_workbench);
  });

En la actualidad, eso genera constantemente un orden de clasificación con descripciones de:

Testing: d.
Testing: e.
Test: a.
Testing: f.
Test: c.
Test: b.
Testing: g.
Testing: b.
Testing: a.
Test: d.
Testing: c.
Testing: h.
Testing: i.
Testing: j.
Testing: k.
Testing: l.

Lo que esperaría que sucediera es que tuviera "Prueba:[a-d]" que aparecen en orden, y luego "Prueba:[a-l]" que aparecen en orden.

No estoy seguro de cómo codificar algo que genere naturalmente este orden;no coincide con su orden de creación (creo que los tiempos/orden de creación de "Prueba:[a-d]" y "Pruebas:[a-l]" se superponen, pero se crearon individualmente en orden secuencial).

Obtengo resultados similares, pero no idénticos, si simplemente configuro la función para comparar las descripciones inalteradas con < o >.Al menos dentro de "Test"/"Testing", una búsqueda lexicográfica inalterada debería coincidir con los resultados de la búsqueda que quiero.Busqué un poco en mi código y no encontré nada más que obviamente alterara el orden de esa matriz.

¿Algo que parezca incorrecto?

Gracias,

¿Fue útil?

Solución

el js Array.sort El método toma una función de comparación. cmp(a, b) eso debería regresar 1 u otro número positivo (que indica a < b), -1 u otro número negativo (que indica b > a), o 0 (indicando valores equivalentes) - consulte la Documentos de MDN.El tuyo devuelve un booleano, efectivamente sólo 1 o 0, por lo que no se ordenará correctamente.

Intentar

return first_workbench === second_workbench ? 0 :
    first_workbench > second_workbench ? 1 : -1;

o similar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top