Comunidad de diseño web y desarrollo en internet online

String to Number

Citar            
MensajeEscrito el 10 Jun 2008 03:19 pm
Hola buenas, a ver si me podéis ayudar con este problema.

Cargo de un XML los datos de unos artículos, entre ellos el precio, y los meto en un array 'nombres':

Código :

nombres[i]["precio"] = nombresXml.firstChild.childNodes[i].childNodes[9].firstChild.nodeValue;


Para luego mostrar los artículos, tengo la opción de ordenarlos por nombre, precio, etc:

Código :

nombres.sortOn(["precio", "nombre"],[Array.NUMERIC, Array.CASEINSENSITIVE]);


En este caso, me muestra los precios en este orden:
17 - 23 - 3 - 33 - 33.4 - 33.5 - 33.8 - 333 - 6 - 65


Estuve mirando, y creo que el problema es que flash recoge los datos del precio y los interpreta de tipo String, entonces, para pasarlos a tipo Number, lo que he hecho ha sido modificar la manera de pasar los datos al array 'nombres':

Código :

Number(nombres[i]["precio"]=nombresXml.firstChild.childNodes[i].childNodes[9].firstChild.nodeValue);


Pero me sigue mostrando los orecios en el orden anterior. Mi pregunta es, como puedo almacenarlos en el array 'nombres' y definir que son de tipo Number?
Desde ya muchas gracias.

Un saludo!

Por elmaxloko

7 de clabLevel



Genero:Masculino  

Valencia - España

firefox
Citar            
MensajeEscrito el 10 Jun 2008 06:15 pm
Haces un cast

Number(loquesea)

Si loquesea no es convertible, te dara NaN (Not a Number)

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 11 Jun 2008 07:48 am
Gracias solisarg, pero... Puedes especificar?

Que es un cast? Si es hacer:

Código :

Number(loquesea)


Ya lo hago:

Código :

Number(nombres[i]["precio"]=nombresXml.firstChild.childNodes[i].childNodes[9].firstChild.nodeValue);


Y de hecho no me da NaN, es numérico, pero me los ordena tipo String cuando le hago sortOn():
17 - 23 - 3 - 33 - 33.4 - 33.5 - 33.8 - 333 - 6 - 65


Me estoy dejando algo en el tintero?

Un saludo!

Por elmaxloko

7 de clabLevel



Genero:Masculino  

Valencia - España

firefox
Citar            
MensajeEscrito el 11 Jun 2008 08:17 am
Hola!
Veras, en la ayuda de Flash 8, al visualizar el metodo sortOn() te indica que por defecto, no ordena numericamente el array aunque los valores de los elementos sean numericos, pero para que lo haga debes añadir la opcion array.NUMERIC de la siguiente manera:
mi_array.sortOn( "campo a ordenar", array.NUMERIC);

De esta manera te lo ordenara correctamente, tambien le puedes decir si lo quieres hacer de manera ascendente o descendente, esta opcion se añade a continuación de la de NUMERIC, por ejemplo:
mi_array.sortOn( "campo a ordenar", array.NUMERIC | array.DESCENDING);

Weno, espero que te sirva de ayuda.

Un saludo!

Por _alvaro

12 de clabLevel



 

firefox
Citar            
MensajeEscrito el 11 Jun 2008 08:30 am
Gracias _alvaro, pero de hecho ya hago lo que me dices:

Código :

nombres.sortOn(["precio", "nombre"],[Array.NUMERIC, Array.CASEINSENSITIVE]);


Y sigue pasando lo mismo.

Un saludo.

Por elmaxloko

7 de clabLevel



Genero:Masculino  

Valencia - España

firefox
Citar            
MensajeEscrito el 11 Jun 2008 08:58 am
Mmmm, ya veo, pero solo una cuestion, los corchetes los pones porque te apetece??
Lo digo porque en la ayuda de flash no aparece de esa manera, sino literalmente asi:

my_array.sortOn("age", Array.DESCENDING | Array.NUMERIC);

Como ves, los separa del campo a ordenar con una coma, pero las opciones no llevan corchetes, puede ser un error sintactico, ah y entre las opciones se separan con | .

Weno, siento no servir de mas ayuda.
Un saludo.

Por _alvaro

12 de clabLevel



 

firefox
Citar            
MensajeEscrito el 11 Jun 2008 09:02 am
Una última prueba, he probado lo siguiente en un archivo nuevo:

Código :

numerico = new Array(5, 44, 333);
trace("Los numeros: "+numerico);
trace("La suma de los dos primeros: "+numerico[0]+numerico[1]);
trace("--------------------------------------------------------");
numerico.sortOn(Array.NUMERIC);
trace("Los numeros ordenados: "+numerico);
trace("La suma de los dos primeros ordenados: "+numerico[0]+numerico[1]);
trace("--------------------------------------------------------");
Number(numerico);
numerico.sortOn(Array.NUMERIC);
trace("Los numeros transformados a Number: "+numerico);
trace("La suma de los dos primeros ordenados: "+numerico[0]+numerico[1]);


Con el siguiente resultado:
Los numeros: 5,44,333
La suma de los dos primeros: 544
--------------------------------------------------------
Los numeros ordenados: 333,44,5
La suma de los dos primeros ordenados: 33344
--------------------------------------------------------
Los numeros transformados a Number: 333,44,5
La suma de los dos primeros ordenados: 33344


He mirado la ayuda de flash, y veo que se puede pasar de Number a String con el método "toString()", pero no veo nada de "toNumber()" o algo parecido. Como se soluciona esto, por dios?

Un saludo.

Por elmaxloko

7 de clabLevel



Genero:Masculino  

Valencia - España

firefox
Citar            
MensajeEscrito el 11 Jun 2008 09:31 am
SortOn necesita que el array tenga nombre de campo, es decir un array de objetos, por ejemplo:

Código :

numerico = new Array({nombre:"Pan", precio:44},{Name:"Vino", precio:5 }, {nombre:"Fideos", precio:333});
numerico.sortOn("precio", Array.NUMERIC);
for(var i=0; i<numerico.length; i++){
   trace(numerico[i].nombre+": "+numerico[i].precio)
}


Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 11 Jun 2008 09:59 am
Lo siento, pero no me funciona. Tengo lo siguiente:

Código :

nombres[i]["precio"] = nombresXml.firstChild.childNodes[i].childNodes[9].firstChild.nodeValue;


Que da este resultado (sin orednar):
33.5 - 33 - 33.4 - 33.8 - 333 - 65 - 3 - 23 - 6 - 17


Luego le paso lo siguiente para ordenarlo:

Código :

nombres.sortOn("precio",Array.NUMERIC);


Con este resultado (se supone que ya ordenado):
17 - 23 - 3 - 33 - 33.4 - 33.5 - 33.8 - 333 - 6 - 65


De verdad, porque puede suceder esto?

Un saludo

Por elmaxloko

7 de clabLevel



Genero:Masculino  

Valencia - España

firefox
Citar            
MensajeEscrito el 11 Jun 2008 10:05 am
Pruébalo así:

nombres[i] = new Object()
nombres[i].precio = Number(nombresXml.firstChild.childNodes[i].childNodes[9].firstChild.nodeValue)

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 11 Jun 2008 10:20 am
Si!!!
Por fin!
Muchas gracias solisarg, de verdad muchas gracias.
Por que el hecho de pasarlo a Object? Pensaba que si no declaras el contenido de un array con comillas te lo cogia por defecto como numero... En fin, duda resuelta, muchas gracias!

Un saludo!

Por elmaxloko

7 de clabLevel



Genero:Masculino  

Valencia - España

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.