Código de JavaScript - Obtener los n valores mas grandes de un array con JavaScript

Imágen de perfil
Val: 2.288
Plata
Ha mantenido su posición en JavaScript (en relación al último mes)
Gráfica de JavaScript

Obtener los n valores mas grandes de un array con JavaScriptgráfica de visualizaciones


JavaScript

Publicado el 22 de Marzo del 2021 por Katas (200 códigos)
3.975 visualizaciones desde el 22 de Marzo del 2021
Función para devolver la cantidad de valores mas grandes de un array.

La función lo que haces es hacer una copia del array con arr.slice() (si no se hace una copia, el array se pasa por referencia, y se modificaría el original).
Posteriormente, se ordena con sort() y se invierten los valores con reverse().
Finalmente obtenemos la cantidad de valores deseados con splice().

1
2
3
4
5
6
const arr=[1,6,3,2,8,4,9,5];
 
mayores(arr, 1); // [9]
mayores(arr, 3); // [9, 8, 6]
mayores(arr, 5); // [9, 8, 6, 5, 4]
mayores(arr, 100); // [9, 8, 6, 5, 4, 3, 2, 1]

1
estrellaestrellaestrellaestrellaestrella(2)

Publicado el 22 de Marzo del 2021gráfica de visualizaciones de la versión: 1
3.976 visualizaciones desde el 22 de Marzo del 2021
estrellaestrellaestrellaestrellaestrella
estrellaestrellaestrellaestrella
estrellaestrellaestrella
estrellaestrella
estrella

1
2
3
4
5
6
7
8
9
/**
 * Funcion para devolver los valores mayores de un array
 *
 * @param {array}   arr Array a obtener los valores mayores
 * @param {integer} len Longitud de volver a devolver
 *
 * @return {array} Devuelve un array con los valores mayores
 */
const mayores = (arr, len=3) => arr.slice().sort((a, b) => b-a).splice(0, len);



Comentarios sobre la versión: 1 (2)

Imágen de perfil
23 de Marzo del 2021
estrellaestrellaestrellaestrellaestrella
Está super bien Katas!! Lo único malo es que la función solo funciona con valores de un solo digito (0, 1, 2, 3, 4, 5, 6, 7, 8 y 9), ya que sort() por defecto usa la lógica de orden alfanumérico. Por ejemplo:

1
2
3
var miArray = [ 5, 123, 254 ]; //SU ORDEN DE MAYOR A MENOR SERÍA [ 254, 123, 5 ]
 
miArray.sort(); //AHORA miArray ALMACENA [ 123, 254, 5 ] LO CUAL SIGUE DESORDENADO PARA LO QUE NECESITAMOS


Para solucionar esto se puede agregar function(a, b){return b-a} dentro del parámetro de sort() quedando de la siguiente forma:

1
miArray.sort(function(a, b){return b-a}); //AHORA SI, EL RESULTADO SERÍA [ 254, 123, 5 ]

Nótese que de esta forma, sort() entrega el resultado ya de mayor a menor, por lo que no se necesita usar la función reverse() a continuación.


En pocas palabras, pienso que la función quedaría mejor de esta forma:
1
const mayores = (arr, len=3) => arr.slice().sort(function(a, b){return b-a}).splice(0, len);


Un saludo!
Responder
Imágen de perfil
23 de Marzo del 2021
estrellaestrellaestrellaestrellaestrella
Mucha Razón Gio!!! no me di cuenta!!!

Ya lo he cambiado y puesto como tu bien has indicado.
Responder

Comentar la versión: 1

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad

http://lwp-l.com/s6962