
Christian Boffill
PreguntaLos métodos de arrays en JS como map, filter, sort, reduce, findIndex, etc. ¿Cómo es que les puedo dar su notación correctamente??? ¿Tendría que saber como están construidos o hay una forma de analizarlos??? gracias
-
: Recorre un arreglo como
.map
, entonces es unfor
.O(n)
-
: Recorre un arreglo como
.filter
y filtra los elementos necesarios, entonces es unfor
.O(n)
-
: Recorre un arreglo como
.reduce
y transforma los elementos, entonces es unfor
.O(n)
-
: Recorre un arreglo como
.findIndex
hasta encontrar el índice de un elemento, entonces es unfor
.O(n)
- Chrome usa TimSort que es
O(n)
- Firefox usa Merge Sort que es
O(n * log(n))

Marcelo Arias
¡Hola Christian! Muy buenas preguntas.
Primero, si los arreglos tienen relación directa con el input (la entrada) entonces sí es necesario analizarlos para obtener la notación Big-O:
// .map() recibe a un input ✅ const algoritmoA = (n) => { n.map((item) => console.log(item)); // <- Necesitamos analizarlo }; algoritmoA([1, 2, 3, 4, 5]); // .map() no recibe al input ❌ const algoritmoB = (n) => { ['x', 'y'].map((item) => console.log(item)); }; algoritmoB([1, 2, 3, 4, 5]);
Y en el caso en que necesitemos analizarlos → Necesitamos entender su estructura, y determinar si al momento de incrementar el tamaño de la entrada, el método tendrá que incrementarse igual.
Me dejaste unos ejemplos muy buenos:
Sin embargo, sí existen casos donde tenemos que saber cómo están construidos los algoritmos según el entorno de ejecución. Para un método como
sort
Por ejemplo:
🤔 En este caso ¿Qué notación utilizaríamos? Big-O se alinea al peor caso posible (el de la complejidad mayor). Como respuesta podemos decir que
O(n * log(n))
O(n)
¿Y si estamos interesados en un navegador o entorno de ejecución en específico?
✅ Gracias a que Big-O es un estándar, lo usual es encontrar esta medida en la documentación del navegador o del entorno de ejecución, o bien encontrar el nombre del algoritmo utilizado. (Por ejemplo, si es Merge Sort sabemos que es
O(n * log(n))