2010-11-28 10 views
5

¿Existe una manera barata de invertir:JSON inversa Javascript

{ 
    "10": "..." 
    "11": "...", 
    "12": "...", 
    "13": "...", 
    "14": "...", 
} 

modo que me sale:

{ 
    "14": "...", 
    "13": "...", 
    "12": "..." 
    "11": "...", 
    "10": "...", 
} 

inversa() no parece que trabajar en objetos JSON. La única forma en que puedo pensar es recorrer todos los elementos y crear una matriz. siente que debería haber una mejor manera.

Edit: Gracias por toda la ayuda ACTUALIZACIÓN:

¿Y digamos que si cada tecla tiene datos cronológicos. Cuando uso $ .each en el objeto, se ejecuta a través de los objetos de arriba a abajo, no me di cuenta de que no era confiable.

Aquí es lo que estoy tratando de hacer:

$.each(object, function (key, value) { 
    function foo (key, value); 
}); 

quiero no ejecutar fu en todos menos en los últimos 3 pares, es decir que sólo desea utilizar los últimos 3 pares. Pensé que si podía revertirlos, solo podía ejecutar los primeros tres y parar.

¿Hay alguna manera en que pueda hacer las últimas 3? Si los últimos 3 pedidos no son confiables, ¿hay alguna manera más segura de obtener los últimos 3. Los últimos 3 tendrán las teclas numéricas más grandes.

Gracias.

Edit 2: Básicamente estoy decidiendo finalmente hacer las manipulaciones en el lado del servidor. Estoy reorganizando mi base de datos para que los subdocumentos relevantes estén ahora completos en los documentos que podrían consultarse con mongodb. Gracias.

+2

Realmente tengo que cuestionar lo que está intentando para lograr haciendo esto. A la mayoría de los lenguajes que tienen un analizador JSON no les importará en qué orden están los pares. –

+2

@Mark reverse() es un método Array, y usted tiene objetos. Además, desea crear "otra matriz", pero lo que obtuvo no son matrices sino objetos simples. –

+0

@ Mark Creo que ambos fragmentos de código crearán objetos con las mismas características. Una vez que se evalúan los literales de los objetos, se pierde la información sobre el orden de las propiedades en el literal. –

Respuesta

8

Las matrices asociativas Javascript no están ordenadas. No puede depender de que las propiedades estén en un orden particular.

De Mozilla Developer Network:

Aunque ECMAScript hace iteración orden de los objetos dependiente de la implementación, puede parecer que todos los navegadores soportan una orden de iteración basado en la más temprano propiedad añadido viene primero (al menos para las propiedades que no están en el prototipo ). Sin embargo, en el caso de Internet Explorer, cuando uno utiliza eliminar en una propiedad, algunas confusas resultados de comportamiento, evitando que otros navegadores el uso de objetos simples como objetos literales según lo ordenado matrices asociativas. En el Explorador, mientras el valor de la propiedad es de hecho establece en indefinido, si se añade más adelante hacia atrás una propiedad con el mismo nombre, la propiedad se pueden repetir en su antigua posición - no al final de la secuencia iteración como uno podría esperar después de haber eliminado la propiedad y y luego agregarlo de nuevo.

lo tanto, si desea simular un matriz asociativa ordenada en un cross-browser medio ambiente, que se ven obligados a cualquiera uso de dos matrices independientes (uno para las teclas y el otro para los valores), o construcción una matriz de objetos de propiedad única , etc.

+4

@Ignacio esto no es una pregunta de PHP. –

+3

@Ignacio Hablaba de objetos JavaScript. –

+1

Esto se debe a que las "matrices asociativas" de Javascript son en realidad objetos con propiedades, en lugar de matrices reales. – Orbling

1

Esto podría ayudar. Obtenga todas las claves de los objetos json en una matriz, que puede ordenar.

var a = { 1 : 'x', 3 : 'y', 2 : 'z' }; 
var keys = [] 
for (i in a) { keys.push(i); } 
keys.sort(); 

Luego puede usar reverse() y slice() para simplemente iterar sobre las teclas que necesita.

$.each(keys, function(idx, key) { 
    // do whatever with a[key] 
}); 
+0

bien esto es lo que estoy haciendo en este momento – Mark

1

Siga el JSON en orden inverso,

for(json.length;i>=0;i--) 
{ 
    console.log(json.[i]); 
} 
3

utilizar esto en JSON objetos matrices

jsonObjectArray.reverse(); 
$.each(jsonObjectArray, function(i, item) { 
    //do something with the item 
}); 

espero que esto ayude