JavaScript - El metodo slice() me está dando problemas

 
Vista:
sin imagen de perfil

El metodo slice() me está dando problemas

Publicado por Deslock (1 intervención) el 03/12/2021 05:02:21
Buenas tardes, resultado que tengo el siguiente codigo:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//Mediana del top 10% más ricos:
const spliceStartRicos= parseInt((listSalarioOrdenado.length * 90) / 100);//Separamos el 90% de los salarios.(18/20). Lo parseamos por si la division nos da numero decimal.
const spliceCountRicos=  parseInt(listSalarioOrdenado.length - spliceStartRicos);//Conseguimos el otro 10% de los salarios.(2/20)
 
const salariosColPorcentaje10Ricos= listSalarioOrdenado.splice(spliceStartRicos, spliceCountRicos);//Capturamos los elementos que están desde el indice en spliceStart hasta la cantidad de elementos con spliceCount.
 
const medianaTop10ColRicos= calcularMedianaSalarios(salariosColPorcentaje10Ricos);
 
//Mediana del top 10% más pobre:
const spliceCountPobres= parseInt((listSalarioOrdenado.length * 10) /100);
const salariosColporcentaje10Pobres= listSalarioOrdenado.slice(0, spliceCountPobres);//Con slice() conseguimos no mutar el array original y campuramos los elementos que estan en dichas posiciones para almacenarlos en un array nuevo.
 
const medianaTopColPobres= calcularMedianaSalarios(salariosColporcentaje10Pobres);
 
 
console.log(
    medianaGeneralCol,
    medianaTop10ColRicos,
    medianaTopColPobres,
);

Cuento con un array que tiene elementos y cada elemento tiene un nombre y un salario. Este es el codigo de mi array ordenado:
1
2
3
4
5
6
7
8
9
//Obtenemos los salarios del array colombia:
const salarios= colombia.map(persona =>{
    return persona.salario;
});
 
//Ordenamos los salarios:
const listSalarioOrdenado= salarios.sort(function(a,b){
    return a-b;
});
Pasa que al momento de recorrer con slice() mi array ordenado para sacar el 10% del de la poblacion más pobre, este solo me toma el valor en la posición 0 de mi array, ósea no me está tomando la variable spliceCountPobres que es igual a 2. Y lo que quiero es que me tome los 2 primeros elementos de mi array "listadoSalarioOrdenado" según el 10%. Representativamente lo que intento hacer es slice(0, 2). Pero no me esta recorriendo los dos elementos como debería. Y es raro, porque cuando coloco listadoSalarioOrdenado.slice(0, 2) hay si me recorre y toma los dos valores que quiero de mi array original y me le saca la mediana, pero cuando coloco listadoSalarioOrdenado.slice(0, spliceCountPobres) no me da, solo me arroja el valor de la posición 0.

No se si alguno de ustedes me podrían ayudar compañeros. Quiero que me agarre la variable spliceCountPobres para hacerlo más genérico. Agradezco mucho cualquier ayuda.

Dejo las funciones para el promedio y la media por si alguno lo necesita:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
//Funciones helper/utils para verificar si la longitud de array es par o inpar:
function esPar(numero){
 
    return (numero % 2 === 0);
}
 
//Sacamos el promedio de los salarios:
function operacionPromedio(lista){//Le pasamos un array por parametros
    //Utilizaremos otros metodos de recorrido que tienen los array para poderlos iterar:
    //Reduce:
    const sumaLista= lista.reduce(//La lista vienesiendo el array.
        function(valorAcumulado=0, nuevoElemento){//El primer parametro será donde vamos a guardar la suma acumulada que retorna nuestra funcion anonima, debe tener un valor por defecto o no, es decir si quieres puede ser igual a 0 o no, aunque si es igual a cero puede resultar en problemas al momento de hacer otras operaciones de media armonica diferente a la suma. El segundo parametro que recibimos en esta funcion anonimá será cada elemento que del array, esté valor se encarga de recorrer cada elemento
            return valorAcumulado + nuevoElemento;//Sumamos el primer, segundo, tercero etc.. elemento, al acumulado en cada iteración
        }
    );
 
    const promedioLista= sumaLista / lista.length;
    return promedioLista;
}
 
 
//Calculadora de mediana:
//Sacamos la mediana de los salarios
function calcularMedianaSalarios(listSalarioOrdenado){
    let mediana;
    const mitadLista= parseInt(listSalarioOrdenado.length / 2);
    if (esPar(listSalarioOrdenado.length)){
 
        const elementoSalario1= listSalarioOrdenado[mitadLista-1];
        const elementoSalario2= listSalarioOrdenado[mitadLista];
        const promedioDeMediana= operacionPromedio([elementoSalario1,elementoSalario2]);
        mediana=promedioDeMediana;
    }
    else{
        mediana= listSalarioOrdenado[mitadLista];
    }
    return mediana;
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de 7aamin
Val: 9
Ha aumentado su posición en 6 puestos en JavaScript (en relación al último mes)
Gráfica de JavaScript

El metodo slice() me está dando problemas

Publicado por 7aamin (79 intervenciones) el 03/12/2021 05:56:05
No entiendo a qué te refieres con "recorrer" con slice() .. slice no sirve para iterar, slice() sirve para dividir un array, recibe 2 parámetros, el primero es el inicio y el segundo el final..
1
2
arr = [1,2,3,4,5]
arr.slice(1,4) // esto devuelve [2,3,4]

El final siempre servirá como corte, es decir, no será incluido en el array final.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar