Aunque JavaScript ha estado en el negocio durante más de 25 años, todavía se considera uno de los lenguajes de programación más complicados a nivel experto. Hay tantos conceptos en este lenguaje. A lo largo de los años, JavaScript ha cambiado mucho. Las funciones antiguas se eliminan o actualizan. Se agregan nuevas características con frecuencia.
Por estas (y muchas otras) razones, no es fácil convertirse en desarrollador de JavaScript. Resolver los desafíos de codificación de JavaScript de nivel experto es aún más difícil. Entonces, en este artículo, enumeraremos los 3 principales desafíos de codificación de nivel experto para los desarrolladores de JavaScript.
Las cadenas se usan comúnmente para verificar la experiencia y el nivel de un programador. En JavaScript, las cadenas se usan mucho. Entonces, el entrevistador siempre se enfoca en las cadenas.
En este desafío de codificación, tienes una cadena en la que cada carácter es un alfabeto como el siguiente.
let str = "abbbcabcdefef"
Debe encontrar la longitud de la subcadena más larga de la cadena sin repetir ningún carácter. En otras palabras, encuentre la longitud de la subcadena más larga con caracteres únicos.
En la cadena anterior, la subcadena más larga sin caracteres repetidos es "abcdef". Entonces la salida será 6.
La primera forma de resolver este desafío es usando loops y Set.
let getLength = function ( str ) { let finalLength = 0 ; for ( let i = 0 ; i < str.length; i++) { let currentString = new Set (); for ( let j = i; j < str.length; j++) { if (currentString.has(str[j])) { break ; } else { currentString.add(str[j]); } } finalLength = Math .max(finalLength, currentString.size); } return finalLength; }; const str = "abbbcabcdefef" ; console .log(getLength(str));
En este enfoque, primero, se realiza un bucle a través de cada carácter y luego, para cada carácter, se realiza un bucle para los caracteres restantes. Cada uno de los personajes se agrega al Conjunto hasta que se encuentra un personaje repetido. En este punto, cuando se encuentra el carácter repetido, su longitud se almacena en una variable.
El enfoque anterior funciona bien, pero no es eficiente. En su lugar, utilice el siguiente enfoque con matrices.
let getLength = function ( str ) { let currentString = []; let finalLength = 0 ; for ( let i = 0 ; i < str.length; i++) { const currentCharacterIndex = currentString.indexOf(str[i]); if (currentCharacterIndex !== -1 ) { currentString.splice( 0 , currentCharacterIndex + 1 ); } currentString.push(str[i]); finalLength = Math .max(finalLength, currentString.length); } return finalLength; }; const str = "abbbcabcdefef" ; console .log(getLength(str));
Este enfoque es similar al anterior, pero en lugar de Set, utiliza una matriz para almacenar la cadena actual.
En este desafío de codificación, se le proporcionará una matriz que contiene números y letras. Tienes que reestructurar la matriz de manera que los números estén primero y las letras en segundo lugar.
Por ejemplo, la siguiente es la matriz.
let arr = [ 2 , "b" , 4 , "d" , 3 , "a" , "c" , "e" , 5 , 1 ];
La salida debe ser;
[2, 4, 3, 5, 1, "b", "d", "a", "c", "e"];
La solución básica es mediante el uso de matrices y bucles for. Pero, como este desafío es para desarrolladores expertos de JavaScript, use funciones de matriz modernas como filter().
let numbersFirstAlphabetsSecond = ( arr ) => { let numbers = []; let alphabets = []; let finalArr = []; numbers = arr.filter( ( val ) => typeof val === "number" ); alphabets = arr.filter( ( val ) => typeof val === "string" ); finalArr = [...numbers, ...alphabets]; return finalArr; }; let arr = [ 2 , "b" , 4 , "d" , 3 , "a" , "c" , "e" , 5 , 1 ]; console .log(numbersFirstAlphabetsSecond(arr));
En este enfoque, los números y los alfabetos se almacenan en matrices separadas. Luego, se fusionan en una sola matriz de acuerdo con la estructura.
Este desafío puede tener un giro. El entrevistador puede pedir ordenar los números y alfabetos en la matriz final. Si conoce la función correcta que debe usar, será muy fácil.
let numbersFirstAlphabetsSecond = ( arr ) => { let numbers = []; let alphabets = []; let finalArr = []; numbers = arr.filter( ( val ) => typeof val === "number" ); alphabets = arr.filter( ( val ) => typeof val === "string" ); finalArr = [...numbers.sort(), ...alphabets.sort()]; return finalArr; }; let arr = [ 2 , "b" , 4 , "d" , 3 , "a" , "c" , "e" , 5 , 1 ]; console .log(numbersFirstAlphabetsSecond(arr));
En este desafío, el motivo principal es comprobar cómo los desarrolladores trabajan con arreglos. Además, el entrevistador quiere verificar el conocimiento de la función incorporada del desarrollador.
Los desafíos de codificación relacionados con Matrix están reservados para desarrolladores experimentados. Por lo tanto, existe una gran posibilidad de que encuentre un desafío de codificación relacionado con la matriz en una entrevista de JavaScript de nivel experto.
En este desafío de codificación, se le proporcionará una matriz 2d con la misma cantidad de filas y columnas. Tienes que rotar esa matriz en el sentido de las agujas del reloj.
Lo siguiente es una entrada con una matriz de 3 x 3.
let m = [ [ 0 , 1 , 2 ], [ 3 , 4 , 5 ], [ 6 , 7 , 8 ], ];
La salida debe ser;
[ [ 6 , 3 , 0 ], [ 7 , 4 , 1 ], [ 8 , 5 , 2 ], ];
Para resolver este desafío, primero transponga (volteando las coordenadas x e y) la matriz y luego inviértala.
const clockWise = ( mat ) => { for ( let r = 0 ; r < mat.length; r++) { for ( let c = 0 ; c < r; c++) { let temp = mat[r][c]; mat[r][c] = mat[c][r]; mat[c][r] = temp; } } let finalMat = mat.map( ( r ) => r.reverse()); return finalMat; }; let m = [ [ 0 , 1 , 2 ], [ 3 , 4 , 5 ], [ 6 , 7 , 8 ], ]; console .log(clockWise(m));
En el enfoque anterior, primero, la matriz se transpone y luego, usando las funciones reverse() en la función map(), la matriz transpuesta se invierte.
Este desafío es difícil y requiere un conocimiento suficiente de la resolución de problemas matriciales. El desarrollador debe saber transponer la matriz porque es la clave de este problema.
Los desafíos de codificación para los desarrolladores expertos de JavaScript no serán fáciles. El desafío puede ser sobre cualquier tema, pero los más enfocados son los arreglos, las cadenas y las matrices, que discutimos en este artículo. Otros temas importantes son objetos, expresiones regulares, números, bucles, funciones y fechas.