05.03.2022 a las 12:39
¿Te han preguntado alguna vez en una entrevista técnica qué es un Polyfill?
Un polyfill no es más que una funcionalidad que añadimos al navegador que debería de tener pero por el motivo que sea no la tiene.
Como sabes, el sort es un método disponible en el prototype de Array de JavaScript. Imagine que por el motivo que sea el método sort no existe, vamos a crear un polyfill del método sort.
Imagina que tenemos un array de número, por ejemplo [23,4,31,44,22,5]
Lo primero que vamos a crear es nuestro método en el prototype de Array que llamaremos miSort. Es importante que no uses una función de flecha ⛔ porque vamos a necesitar hacer referencia al this y con las funciones de flecha no es posible. Usaré el código del algoritmo quicksort que expliqué en este artículo 🤓
Array.prototype.miSort=function(){ return quickSort(this); };
Es importante que tengas claro que el this hace referencia al array sobre el que usaremos el nuevo método miSort.
Ahora el código de la función quicksort. Insisto, puedes ver la explicación aquí 🤯
const quickSort=(input) => { if(input.length===0) return []; //caso base const pivot:number=input[0]; let arrayBigger=[]; let arraySmaller=[]; for(let i:number=1;i<input.length;i++){ if(input[i]<pivot){ arraySmaller.push(input[i]) }else{ arrayBigger.push(input[i]) } } return [...quickSort(arraySmaller),pivot,...quickSort(arrayBigger)]; }
Por último imprimimos en pantalla el resultado de ejecutar el nuevo método miSort al array inicial
console.log([23,4,31,44,22,5].miSort()); //[LOG]: [4, 5, 22, 23, 31, 44]
Te dejo todo el código de corrido para que lo pruebes en un playground o donde quieras 🎸
//DEFINO MI POLYFILL AL QUE LLAMAREMOS -> miSort <- Array.prototype.miSort=function(){ return quickSort(this); }; //ALGORITMO QUICKSORT const quickSort=(input) => { if(input.length===0) return []; //caso base const pivot:number=input[0]; let arrayBigger=[]; let arraySmaller=[]; for(let i:number=1;i<input.length;i++){ if(input[i]<pivot){ arraySmaller.push(input[i]) }else{ arrayBigger.push(input[i]) } } return [...quickSort(arraySmaller),pivot,...quickSort(arrayBigger)]; } //PROBAMOS console.log([23,4,31,44,22,5].miSort());
Hasta luego 🖖
Software
IoT
Digitalización
Aplicaciones móviles
Consultoría