JavaScript - Introducir en una array/objeto el resultado de una función que devuelve un objeto con datos

 
Vista:
sin imagen de perfil
Val: 3
Ha aumentado su posición en 17 puestos en JavaScript (en relación al último mes)
Gráfica de JavaScript

Introducir en una array/objeto el resultado de una función que devuelve un objeto con datos

Publicado por Abel (2 intervenciones) el 24/10/2019 13:59:13
Tengo una función llamada Moda que hace el cálculo Moda de ciertos numeros que yo mismo introduzco. Tengo dos problemas:

Tengo que introducir dos valores en el objeto/array oModa. Tengo que introducir el numero que es el que contiene la array aValores[i], y tambien tengo que introducir la freciencia que es el contador. Eso como se ve, lo he ido haciendo tras acabar el for del array aValores. Pero creo que eso no me lo almacena todo, solo los ultimos dos valores. Quiero almacenar todos los valores en ese objeto.
Esos valores en el objeto oModa, tengo que devolverlos, tanto los valores como sus propiedades: numero/frecuencia. Y lo que quiero es coger ese return en una variable objeto, en este caso la he llamado aPrueba. Pero cuando lo ejecuto dice que prueba no es iterable. Mi problema es que no se como introducir los datos de ese return en esa variable. Aquí os dejo el código. Muchas gracias y un saludo.

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
39
function Moda(...aValores){
    var oModa={};
 
    var intContador=0;
    var intPosicionArray=0;
 
    if(aValores.length===0)//está vacía
        return oModa=[];//dsevolverá un array vacía
 
    for (let valoresArrayValores of aValores){
        intPosicionArray++;//para el primer valor, ya estamos en la primera posicion
        valoresArrayValores=parseFloat(valoresArrayValores);//con esto solucionamo el problema de "";
        if(isNaN(valoresArrayValores))
            throw "el argumento "+intPosicionArray+" no es numérico";
      }
        for(let i=0; i<aValores.length;i++){
            for (let j = 0; j <aValores.length; j++) {
                if(parseFloat(aValores[i])===parseFloat(aValores[j])){//minimo entrará una vez
                    intContador++;
                }
            }
            oModa={
                numero: parseFloat(aValores[i]),
                frecuencia: intContador
            };
            for(let x in oModa)
                console.log(oModa);
 
            intContador=0;//para evaluar el siguiente numero
        }
    return oModa;
}
 
var aValorcitos=[1,2,3,5,6,3];
var aPrueba={};
aPrueba=Moda(...aValorcitos);
for(let i of aPrueba){
    alert(i);
}
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 Alejandro
Val: 1.448
Plata
Ha mantenido su posición en JavaScript (en relación al último mes)
Gráfica de JavaScript

Introducir en una array/objeto el resultado de una función que devuelve un objeto con datos

Publicado por Alejandro (532 intervenciones) el 24/10/2019 16:11:29
  • Alejandro se encuentra ahora conectado en el
  • chat de PHP
Declaras aPrueba como un jSon y si a la función Moda no se le pasaron argumentos devuelves un array vació, eso es un error ya que se esperaba un jSon.
Después intentas iterar aPrueba con for of que es un iterador de arrays, en este caso no hay problema pues malamente recibiste un array y funciona.

Ahora en el caso en que no devuelve un array vació.
En cada iteración del for exterior estas sobrescribiendo la variable oModa con un jSon y al terminar ese único jSon.
aPrueba recibe lo que espera un jSon pero for of itera arrays no jSon y obtienes el error aPrueba no iterable.
Puedes iterar un jSon con for in pero solo obtendras las propiedades numero y frecuencia de la ultima iteración que sobrescribir el jSon.

Ya que sabes lo que sucede sabrás que aPrueba debe recibir un array, oModa debe ser un array de jSon.
oModa debe acumular los jSon
1
2
3
4
oModa.push({
   numero: parseFloat(aValores[i]),
   frecuencia: intContador
});
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
sin imagen de perfil
Val: 3
Ha aumentado su posición en 17 puestos en JavaScript (en relación al último mes)
Gráfica de JavaScript

Introducir en una array/objeto el resultado de una función que devuelve un objeto con datos

Publicado por Abel (2 intervenciones) el 25/10/2019 17:10:36
Muchas gracias por tu pronta respuesta. Finalmente encontre la solución, pero lo que tu me comentas me parece mucho mejor. Mi solucion fue hacer push a una array, pero antes introducir los datos a un objeto, pero veo que tu lo haces todo junto, así que me quedo con lo tuyo. Muchas gracias
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