Foros del Web » Programando para Internet » Javascript »

json google chrome los coloca en orden automáticamente

Estas en el tema de json google chrome los coloca en orden automáticamente en el foro de Javascript en Foros del Web. Saludos, Estoy preparando un aplicación en la que convierte un array de PHP a json para poder manejarme en javascript para unos dropdown. Lo que ...
  #1 (permalink)  
Antiguo 13/11/2012, 21:09
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 10 años, 4 meses
Puntos: 1516
json google chrome los coloca en orden automáticamente

Saludos,

Estoy preparando un aplicación en la que convierte un array de PHP a json para poder manejarme en javascript para unos dropdown. Lo que me dio curiosidad es que el indice cuando es numérico google chrome y firefox tienden a sortearlo de menor a mayor a pesar de que le indique otro orden. Eso me afecta porque yo coloque en orden alfabético y los valores numéricos son solo indices que usaré para almacenar en una base de datos. Dejo un ejemplo
Código Javascript:
Ver original
  1. var v = { "10": "foo", "9":"bar", "1":"baz", "5":"bat", "6":"candy" };
  2. for(var i in v){
  3.     console.log(i + "=" + v[i]);
  4. }
Eso colca en este orden
Cita:
1=baz
5=bat
6=candy
9=bar
10=foo
De la forma como resolví momentaneamente el problema es usando llaves asociativas es decir invertí el que el valor sea numérico y el indice sea la palabra. No me gusta la idea mucho porque puede en un futuro una palabra repetirse pero el valor numérico no, ya que es un autoincrementable y por logica siempre va a ser único, no así el otro valor. Me gustaría saber si existe alguna forma que usando como indice el valor numérico se quede en el orden en que lo coloqué. Sé que conviritiendo el valor a tipo string posiblemente se resuelva pero hasta donde tengo entendido requiere de "trucos" como por ejemplo
Código Javascript:
Ver original
  1. var v = { " 10": "foo", " 9":"bar", " 1":"baz", " 5":"bat", " 6":"candy" };
  2. for(var i in v){
  3.     console.log(i + "=" + v[i]);
  4. }
Eso lo deja en el orden que le indiqué por el espacio que dejo al principio de cada llave, pero para eso tengo que estar quitando el espacio y luego añadir el dato al campo. Solo quiero saber si existe alguna forma de no correr a este tipo de trucos, posiblemente covertirlo a string usando funciones o lo que sea.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #2 (permalink)  
Antiguo 13/11/2012, 22:03
Avatar de Albuss  
Fecha de Ingreso: enero-2012
Ubicación: Coruña
Mensajes: 475
Antigüedad: 7 años, 8 meses
Puntos: 30
Respuesta: json google chrome los coloca en orden automáticamente

Quizás este un poco loco y no me hagas mucho caso, pero .. creo que desde 2005 Michal Migurski escribio una biblioteca para dos funciones (encoder y decoder), para Json en PHP con la que convertir arrays a objetos y viceversa.

http://mike.teczno.com/JSON/JSON.phps
  #3 (permalink)  
Antiguo 13/11/2012, 22:10
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 10 años, 5 meses
Puntos: 1485
Respuesta: json google chrome los coloca en orden automáticamente

¡que tal, compatriota!
interesante el asunto, no lo sabia. parece que javascript detecta que todos son numericos y por ende los ordena. lo de convertir el número a string, es imposible. de hecho, se supone que todos los identificadores para propiedades son convertidas a string. es decir, ningún identificador puede ser númerico.
Código:
var obj = {0: "zero"};
// notese como se indica la propiedad y el valor devuelto ;
console.log(obj[0], obj["0"]);

// no obstante, esto no es valido ;
console.log(obj.0);
en fin, javascript no lo ordena cuando al menos una de las propiedades contiene un caracter que no sea numérico. no necesariamente tiene que ser todas las propiedades. por tanto, una posible solución seria crear una propiedad dummy que no sea a base de números y luego la desechas.
Código:
{ "10": "foo", "9":"bar", "1":"baz", "5":"bat", "6":"candy", "dummy":"dummy" };
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #4 (permalink)  
Antiguo 13/11/2012, 22:19
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 10 años, 4 meses
Puntos: 1516
Respuesta: json google chrome los coloca en orden automáticamente

@Albuss, gracias por el comentario, el problema no es el convertir de PHP a javascript sino que los navegadores que mencioné tienden los indice numéricos a ordenarlos.

@zero, gracias por el comentario (es para mantener uniformidad en el mensaje ), no funciona esa idea para los indices numéricos, bueno al menos yo lo traté con chrome y no salió. Todos los indices los vuelve a colocar en orden numérico y los indices asociativos los deja como está, por ahora lo que me funciona es dejar un espacio o alguna letra, o cambiar a que el valor sea el indice y el indice el valor. Pero bueno si tienes otra idea es bienvenida y así la practico
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #5 (permalink)  
Antiguo 13/11/2012, 22:39
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 10 años, 5 meses
Puntos: 1485
Respuesta: json google chrome los coloca en orden automáticamente

juro que según la prueba que habia hecho, así lo demostraba. volviendo hacer la prueba, resulta que nada de lo que dije es cierto. : bueno, la otra alternativa sería crear un array y que cada elemento sea un objeto. esta forma es infalible. pero a mi juicio es un tanto molestoso porque dependerás de dos bules: el bucle para el array, y el bucle para la propiedad ya que esta es dinámica.

Código:
[{ "10": "foo"}, {"9":"bar"}, {"1":"baz"}, {"5":"bat"}, {"6":"candy" }];
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #6 (permalink)  
Antiguo 14/11/2012, 06:19
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 10 años, 4 meses
Puntos: 1516
Respuesta: json google chrome los coloca en orden automáticamente

Hmmmmm, ese se ve interesante a pesar de hacer lo que dices de dos bucles, pero bueno, vamos a ver que haré en un futuro, Gracias por la ayuda
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos

Etiquetas: automaticamente, chrome, funcion, google, js, json, orden, php
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 02:03.