Imagina que tenemos una matriz como esta:
const words = ['luigi', 'Bar', 'Test', 'zac1', 'Alf0'];Ahora me gustaría ordenar esta matriz alfabéticamente:
words.sort((a, b) => a.localeCompare(b));Imagina que tenemos una variedad de súper palabras. Estas palabras tienen alta prioridad y deben estar en la parte superior de la 'lista de palabras'.
const superWords = ["zac1", "Test"]Entonces, el resultado deseado de la matriz de palabras será:
const desiredResult = ["Test", "zac1","Alf0", "Bar", "luigi"]¿Cómo puedo hacerlo?
Puede convertir superWords en un Conjunto para el tiempo de búsqueda O(1) usando has en lugar de O(n) usando includes cuando superWords es una matriz (donde n es el número de palabras en superWords ):
const words = ['luigi', 'Bar', 'Test', 'zac1', 'Alf0']; const superWords = ['zac1', 'Test']; const superWordsSet = new Set(superWords); // This is O(n) but you only need to do this once. words.sort((a, b) => { if (superWordsSet.has(a) && !superWordsSet.has(b)) { return -1; } else if (!superWordsSet.has(a) && superWordsSet.has(b)) { return 1; } return a.localeCompare(b); }); console.log(words);Actuación
El método
Sethasverifica si un valor está en un objetoSet, utilizando un enfoque que, en promedio, es más rápido que probar la mayoría de los elementos que se han agregado previamente al objetoSet. En particular, es, en promedio, más rápido que el métodoArray.prototype.includescuando un objetoArraytiene unalengthigual alsizede un objetoSet.
Puedes hacerlo
const words = ['luigi', 'Bar', 'Test', 'zac1', 'Alf0']; words.sort((a, b) => { const superWords = ["zac1", "Test"] if(superWords.includes(a) && !superWords.includes(b)){ return -1 }else if(superWords.includes(b) && !superWords.includes(a)){ return 1 } return a.localeCompare(b) }) console.log(words)El primer paso es encontrar dobles y luego puede ordenar ambas matrices y luego puede concatenar las matrices.
let words = ['luigi', 'Bar', 'Test', 'zac1', 'Alf0']; const superWords = ["zac1", "Test"] words = words.filter(w => ! superWords.includes(w)); words.sort((a, b) => a.localeCompare(b)); superWords.sort((a, b) => a.localeCompare(b)); console.log(superWords.concat(words));